From 3c87903cf074fcce22de0cffa9e99f59d5ec9a1d Mon Sep 17 00:00:00 2001 From: Claudio Valerio Date: Wed, 27 Apr 2011 09:46:10 +0200 Subject: [PATCH] Updated xpdf library --- thirdparty/xpdf/3.02/include/aconf.h | 47 - thirdparty/xpdf/3.02/include/aconf2.h | 38 - thirdparty/xpdf/3.02/include/xpdf/Array.h | 58 - thirdparty/xpdf/3.02/include/xpdf/Catalog.h | 118 - thirdparty/xpdf/3.02/include/xpdf/CharTypes.h | 24 - thirdparty/xpdf/3.02/include/xpdf/Dict.h | 77 - thirdparty/xpdf/3.02/include/xpdf/Function.h | 231 - thirdparty/xpdf/3.02/include/xpdf/GMutex.h | 49 - thirdparty/xpdf/3.02/include/xpdf/GString.h | 136 - thirdparty/xpdf/3.02/include/xpdf/GfxState.h | 1267 -- .../xpdf/3.02/include/xpdf/GlobalParams.h | 485 - thirdparty/xpdf/3.02/include/xpdf/Object.h | 303 - thirdparty/xpdf/3.02/include/xpdf/OutputDev.h | 263 - thirdparty/xpdf/3.02/include/xpdf/PDFDoc.h | 207 - thirdparty/xpdf/3.02/include/xpdf/Page.h | 199 - .../xpdf/3.02/include/xpdf/SplashBitmap.h | 69 - .../xpdf/3.02/include/xpdf/SplashOutputDev.h | 277 - .../xpdf/3.02/include/xpdf/SplashTypes.h | 132 - thirdparty/xpdf/3.02/include/xpdf/Stream.h | 884 -- thirdparty/xpdf/3.02/include/xpdf/XRef.h | 134 - thirdparty/xpdf/3.02/include/xpdf/config.h | 106 - thirdparty/xpdf/3.02/include/xpdf/gmem.h | 79 - thirdparty/xpdf/3.02/include/xpdf/gtypes.h | 29 - thirdparty/xpdf/3.02/lib/linux/libxpdf.a | Bin 2318206 -> 0 bytes thirdparty/xpdf/3.02/lib/macx/libxpdf.a | Bin 4298120 -> 0 bytes thirdparty/xpdf/3.02/lib/win32/xpdf.lib | Bin 3966848 -> 0 bytes thirdparty/xpdf/3.02/src/ANNOUNCE | 34 - thirdparty/xpdf/3.02/src/CHANGES | 2051 --- thirdparty/xpdf/3.02/src/INSTALL | 248 - thirdparty/xpdf/3.02/src/Makefile.in | 126 - thirdparty/xpdf/3.02/src/README | 19 - thirdparty/xpdf/3.02/src/aclocal.m4 | 274 - thirdparty/xpdf/3.02/src/aconf-dj.h | 78 - thirdparty/xpdf/3.02/src/aconf-win32.h | 121 - thirdparty/xpdf/3.02/src/aconf.h.in | 116 - thirdparty/xpdf/3.02/src/aconf2.h | 38 - thirdparty/xpdf/3.02/src/configure | 12810 ---------------- thirdparty/xpdf/3.02/src/configure.in | 368 - thirdparty/xpdf/3.02/src/dj_make.bat | 83 - thirdparty/xpdf/3.02/src/doc/pdffonts.1 | 142 - thirdparty/xpdf/3.02/src/doc/pdffonts.cat | 104 - thirdparty/xpdf/3.02/src/doc/pdffonts.hlp | 114 - thirdparty/xpdf/3.02/src/doc/pdfimages.1 | 102 - thirdparty/xpdf/3.02/src/doc/pdfimages.cat | 85 - thirdparty/xpdf/3.02/src/doc/pdfimages.hlp | 94 - thirdparty/xpdf/3.02/src/doc/pdfinfo.1 | 161 - thirdparty/xpdf/3.02/src/doc/pdfinfo.cat | 113 - thirdparty/xpdf/3.02/src/doc/pdfinfo.hlp | 122 - thirdparty/xpdf/3.02/src/doc/pdftoppm.1 | 123 - thirdparty/xpdf/3.02/src/doc/pdftoppm.cat | 101 - thirdparty/xpdf/3.02/src/doc/pdftoppm.hlp | 110 - thirdparty/xpdf/3.02/src/doc/pdftops.1 | 235 - thirdparty/xpdf/3.02/src/doc/pdftops.cat | 202 - thirdparty/xpdf/3.02/src/doc/pdftops.hlp | 211 - thirdparty/xpdf/3.02/src/doc/pdftotext.1 | 141 - thirdparty/xpdf/3.02/src/doc/pdftotext.cat | 115 - thirdparty/xpdf/3.02/src/doc/pdftotext.hlp | 127 - thirdparty/xpdf/3.02/src/doc/sample-xpdfrc | 92 - thirdparty/xpdf/3.02/src/doc/xpdf.1 | 874 -- thirdparty/xpdf/3.02/src/doc/xpdf.cat | 765 - thirdparty/xpdf/3.02/src/doc/xpdf.hlp | 779 - thirdparty/xpdf/3.02/src/doc/xpdfrc.5 | 662 - thirdparty/xpdf/3.02/src/doc/xpdfrc.cat | 596 - thirdparty/xpdf/3.02/src/doc/xpdfrc.hlp | 604 - thirdparty/xpdf/3.02/src/fofi/FoFiBase.cc | 175 - thirdparty/xpdf/3.02/src/fofi/FoFiBase.h | 58 - .../xpdf/3.02/src/fofi/FoFiEncodings.cc | 994 -- thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.h | 36 - .../xpdf/3.02/src/fofi/FoFiIdentifier.cc | 632 - .../xpdf/3.02/src/fofi/FoFiIdentifier.h | 44 - thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.cc | 2092 --- thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.h | 178 - thirdparty/xpdf/3.02/src/fofi/FoFiType1.cc | 338 - thirdparty/xpdf/3.02/src/fofi/FoFiType1.h | 64 - thirdparty/xpdf/3.02/src/fofi/FoFiType1C.cc | 2668 ---- thirdparty/xpdf/3.02/src/fofi/FoFiType1C.h | 237 - thirdparty/xpdf/3.02/src/fofi/Makefile.dep | 0 thirdparty/xpdf/3.02/src/fofi/Makefile.in | 71 - thirdparty/xpdf/3.02/src/fofi/vms_make.com | 0 thirdparty/xpdf/3.02/src/goo/FixedPoint.cc | 118 - thirdparty/xpdf/3.02/src/goo/FixedPoint.h | 155 - thirdparty/xpdf/3.02/src/goo/GHash.cc | 380 - thirdparty/xpdf/3.02/src/goo/GHash.h | 78 - thirdparty/xpdf/3.02/src/goo/GList.cc | 122 - thirdparty/xpdf/3.02/src/goo/GList.h | 106 - thirdparty/xpdf/3.02/src/goo/GMutex.h | 49 - thirdparty/xpdf/3.02/src/goo/GString.cc | 722 - thirdparty/xpdf/3.02/src/goo/GString.h | 136 - thirdparty/xpdf/3.02/src/goo/Makefile.dep | 0 thirdparty/xpdf/3.02/src/goo/Makefile.in | 71 - thirdparty/xpdf/3.02/src/goo/gfile.cc | 834 - thirdparty/xpdf/3.02/src/goo/gfile.h | 151 - thirdparty/xpdf/3.02/src/goo/gmem.cc | 296 - thirdparty/xpdf/3.02/src/goo/gmem.h | 79 - thirdparty/xpdf/3.02/src/goo/gmempp.cc | 32 - thirdparty/xpdf/3.02/src/goo/gtypes.h | 29 - thirdparty/xpdf/3.02/src/goo/parseargs.c | 190 - thirdparty/xpdf/3.02/src/goo/parseargs.h | 71 - thirdparty/xpdf/3.02/src/goo/vms_directory.c | 214 - thirdparty/xpdf/3.02/src/goo/vms_dirent.h | 67 - thirdparty/xpdf/3.02/src/goo/vms_make.com | 82 - thirdparty/xpdf/3.02/src/goo/vms_sys_dirent.h | 54 - thirdparty/xpdf/3.02/src/goo/vms_unix_time.h | 102 - thirdparty/xpdf/3.02/src/goo/vms_unix_times.c | 42 - thirdparty/xpdf/3.02/src/goo/vms_unlink.c | 22 - thirdparty/xpdf/3.02/src/install-sh | 250 - thirdparty/xpdf/3.02/src/misc/hello.pdf | Bin 917 -> 0 bytes thirdparty/xpdf/3.02/src/misc/xpdf.dt | 28 - thirdparty/xpdf/3.02/src/ms_make.bat | 120 - thirdparty/xpdf/3.02/src/splash/Makefile.dep | 0 thirdparty/xpdf/3.02/src/splash/Makefile.in | 99 - thirdparty/xpdf/3.02/src/splash/Splash.cc | 4833 ------ thirdparty/xpdf/3.02/src/splash/Splash.h | 371 - .../xpdf/3.02/src/splash/SplashBitmap.cc | 229 - .../xpdf/3.02/src/splash/SplashBitmap.h | 69 - thirdparty/xpdf/3.02/src/splash/SplashClip.cc | 399 - thirdparty/xpdf/3.02/src/splash/SplashClip.h | 113 - .../xpdf/3.02/src/splash/SplashErrorCodes.h | 32 - .../xpdf/3.02/src/splash/SplashFTFont.cc | 363 - .../xpdf/3.02/src/splash/SplashFTFont.h | 58 - .../3.02/src/splash/SplashFTFontEngine.cc | 184 - .../xpdf/3.02/src/splash/SplashFTFontEngine.h | 66 - .../xpdf/3.02/src/splash/SplashFTFontFile.cc | 117 - .../xpdf/3.02/src/splash/SplashFTFontFile.h | 74 - thirdparty/xpdf/3.02/src/splash/SplashFont.cc | 178 - thirdparty/xpdf/3.02/src/splash/SplashFont.h | 104 - .../xpdf/3.02/src/splash/SplashFontEngine.cc | 320 - .../xpdf/3.02/src/splash/SplashFontEngine.h | 92 - .../xpdf/3.02/src/splash/SplashFontFile.cc | 55 - .../xpdf/3.02/src/splash/SplashFontFile.h | 60 - .../xpdf/3.02/src/splash/SplashFontFileID.cc | 23 - .../xpdf/3.02/src/splash/SplashFontFileID.h | 30 - .../xpdf/3.02/src/splash/SplashGlyphBitmap.h | 26 - thirdparty/xpdf/3.02/src/splash/SplashMath.h | 206 - thirdparty/xpdf/3.02/src/splash/SplashPath.cc | 185 - thirdparty/xpdf/3.02/src/splash/SplashPath.h | 123 - .../xpdf/3.02/src/splash/SplashPattern.cc | 40 - .../xpdf/3.02/src/splash/SplashPattern.h | 65 - .../xpdf/3.02/src/splash/SplashScreen.cc | 358 - .../xpdf/3.02/src/splash/SplashScreen.h | 63 - .../xpdf/3.02/src/splash/SplashState.cc | 169 - thirdparty/xpdf/3.02/src/splash/SplashState.h | 104 - .../xpdf/3.02/src/splash/SplashT1Font.cc | 287 - .../xpdf/3.02/src/splash/SplashT1Font.h | 57 - .../3.02/src/splash/SplashT1FontEngine.cc | 124 - .../xpdf/3.02/src/splash/SplashT1FontEngine.h | 53 - .../xpdf/3.02/src/splash/SplashT1FontFile.cc | 97 - .../xpdf/3.02/src/splash/SplashT1FontFile.h | 58 - thirdparty/xpdf/3.02/src/splash/SplashTypes.h | 132 - .../xpdf/3.02/src/splash/SplashXPath.cc | 468 - thirdparty/xpdf/3.02/src/splash/SplashXPath.h | 99 - .../3.02/src/splash/SplashXPathScanner.cc | 538 - .../xpdf/3.02/src/splash/SplashXPathScanner.h | 95 - thirdparty/xpdf/3.02/src/splash/vms_make.com | 0 thirdparty/xpdf/3.02/src/vms_make.com | 736 - thirdparty/xpdf/3.02/src/xpdf/Annot.cc | 1638 -- thirdparty/xpdf/3.02/src/xpdf/Annot.h | 148 - thirdparty/xpdf/3.02/src/xpdf/Array.cc | 73 - thirdparty/xpdf/3.02/src/xpdf/Array.h | 58 - thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.cc | 65 - thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.h | 57 - .../xpdf/3.02/src/xpdf/BuiltinFontTables.cc | 4284 ------ .../xpdf/3.02/src/xpdf/BuiltinFontTables.h | 23 - thirdparty/xpdf/3.02/src/xpdf/CMap.cc | 493 - thirdparty/xpdf/3.02/src/xpdf/CMap.h | 116 - thirdparty/xpdf/3.02/src/xpdf/Catalog.cc | 641 - thirdparty/xpdf/3.02/src/xpdf/Catalog.h | 118 - .../xpdf/3.02/src/xpdf/CharCodeToUnicode.cc | 585 - .../xpdf/3.02/src/xpdf/CharCodeToUnicode.h | 121 - thirdparty/xpdf/3.02/src/xpdf/CharTypes.h | 24 - .../xpdf/3.02/src/xpdf/CompactFontTables.h | 464 - .../xpdf/3.02/src/xpdf/CoreOutputDev.cc | 61 - thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.h | 61 - thirdparty/xpdf/3.02/src/xpdf/Decrypt.cc | 784 - thirdparty/xpdf/3.02/src/xpdf/Decrypt.h | 95 - thirdparty/xpdf/3.02/src/xpdf/Dict.cc | 96 - thirdparty/xpdf/3.02/src/xpdf/Dict.h | 77 - thirdparty/xpdf/3.02/src/xpdf/Error.cc | 68 - thirdparty/xpdf/3.02/src/xpdf/Error.h | 42 - thirdparty/xpdf/3.02/src/xpdf/ErrorCodes.h | 36 - .../xpdf/3.02/src/xpdf/FontEncodingTables.cc | 1824 --- .../xpdf/3.02/src/xpdf/FontEncodingTables.h | 20 - thirdparty/xpdf/3.02/src/xpdf/Function.cc | 1663 -- thirdparty/xpdf/3.02/src/xpdf/Function.h | 231 - thirdparty/xpdf/3.02/src/xpdf/Gfx.cc | 4576 ------ thirdparty/xpdf/3.02/src/xpdf/Gfx.h | 344 - thirdparty/xpdf/3.02/src/xpdf/GfxFont.cc | 1707 -- thirdparty/xpdf/3.02/src/xpdf/GfxFont.h | 322 - thirdparty/xpdf/3.02/src/xpdf/GfxState.cc | 4306 ------ thirdparty/xpdf/3.02/src/xpdf/GfxState.h | 1267 -- thirdparty/xpdf/3.02/src/xpdf/GlobalParams.cc | 3055 ---- thirdparty/xpdf/3.02/src/xpdf/GlobalParams.h | 485 - .../xpdf/3.02/src/xpdf/ImageOutputDev.cc | 203 - .../xpdf/3.02/src/xpdf/ImageOutputDev.h | 88 - .../xpdf/3.02/src/xpdf/JArithmeticDecoder.cc | 353 - .../xpdf/3.02/src/xpdf/JArithmeticDecoder.h | 109 - thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.cc | 3631 ----- thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.h | 149 - thirdparty/xpdf/3.02/src/xpdf/JPXStream.cc | 3359 ---- thirdparty/xpdf/3.02/src/xpdf/JPXStream.h | 358 - thirdparty/xpdf/3.02/src/xpdf/Lexer.cc | 501 - thirdparty/xpdf/3.02/src/xpdf/Lexer.h | 80 - thirdparty/xpdf/3.02/src/xpdf/Link.cc | 801 - thirdparty/xpdf/3.02/src/xpdf/Link.h | 371 - thirdparty/xpdf/3.02/src/xpdf/Makefile.dep | 0 thirdparty/xpdf/3.02/src/xpdf/Makefile.in | 251 - .../xpdf/3.02/src/xpdf/NameToCharCode.cc | 116 - .../xpdf/3.02/src/xpdf/NameToCharCode.h | 42 - .../xpdf/3.02/src/xpdf/NameToUnicodeTable.h | 1097 -- thirdparty/xpdf/3.02/src/xpdf/Object.cc | 231 - thirdparty/xpdf/3.02/src/xpdf/Object.h | 303 - .../xpdf/3.02/src/xpdf/OptionalContent.cc | 500 - .../xpdf/3.02/src/xpdf/OptionalContent.h | 132 - thirdparty/xpdf/3.02/src/xpdf/Outline.cc | 170 - thirdparty/xpdf/3.02/src/xpdf/Outline.h | 76 - thirdparty/xpdf/3.02/src/xpdf/OutputDev.cc | 139 - thirdparty/xpdf/3.02/src/xpdf/OutputDev.h | 263 - thirdparty/xpdf/3.02/src/xpdf/PDFCore.cc | 2711 ---- thirdparty/xpdf/3.02/src/xpdf/PDFCore.h | 388 - thirdparty/xpdf/3.02/src/xpdf/PDFDoc.cc | 506 - thirdparty/xpdf/3.02/src/xpdf/PDFDoc.h | 207 - .../xpdf/3.02/src/xpdf/PDFDocEncoding.cc | 44 - .../xpdf/3.02/src/xpdf/PDFDocEncoding.h | 16 - thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.cc | 6451 -------- thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.h | 421 - thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.cc | 135 - thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.h | 41 - thirdparty/xpdf/3.02/src/xpdf/Page.cc | 480 - thirdparty/xpdf/3.02/src/xpdf/Page.h | 199 - thirdparty/xpdf/3.02/src/xpdf/Parser.cc | 237 - thirdparty/xpdf/3.02/src/xpdf/Parser.h | 62 - .../xpdf/3.02/src/xpdf/PreScanOutputDev.cc | 321 - .../xpdf/3.02/src/xpdf/PreScanOutputDev.h | 155 - .../xpdf/3.02/src/xpdf/SecurityHandler.cc | 387 - .../xpdf/3.02/src/xpdf/SecurityHandler.h | 164 - .../xpdf/3.02/src/xpdf/SplashOutputDev.cc | 3160 ---- .../xpdf/3.02/src/xpdf/SplashOutputDev.h | 277 - thirdparty/xpdf/3.02/src/xpdf/Stream-CCITT.h | 459 - thirdparty/xpdf/3.02/src/xpdf/Stream.cc | 4771 ------ thirdparty/xpdf/3.02/src/xpdf/Stream.h | 884 -- .../xpdf/3.02/src/xpdf/TextOutputDev.cc | 4182 ----- thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.h | 678 - thirdparty/xpdf/3.02/src/xpdf/UTF8.h | 56 - thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.cc | 296 - thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.h | 123 - .../xpdf/3.02/src/xpdf/UnicodeMapTables.h | 365 - .../xpdf/3.02/src/xpdf/UnicodeTypeTable.cc | 953 -- .../xpdf/3.02/src/xpdf/UnicodeTypeTable.h | 22 - thirdparty/xpdf/3.02/src/xpdf/XPDFApp.cc | 448 - thirdparty/xpdf/3.02/src/xpdf/XPDFApp.h | 114 - thirdparty/xpdf/3.02/src/xpdf/XPDFCore.cc | 1695 -- thirdparty/xpdf/3.02/src/xpdf/XPDFCore.h | 251 - thirdparty/xpdf/3.02/src/xpdf/XPDFTree.cc | 951 -- thirdparty/xpdf/3.02/src/xpdf/XPDFTree.h | 46 - thirdparty/xpdf/3.02/src/xpdf/XPDFTreeP.h | 88 - thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.cc | 3526 ----- thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.h | 355 - thirdparty/xpdf/3.02/src/xpdf/XRef.cc | 946 -- thirdparty/xpdf/3.02/src/xpdf/XRef.h | 134 - .../xpdf/3.02/src/xpdf/XpdfPluginAPI.cc | 262 - thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.h | 341 - thirdparty/xpdf/3.02/src/xpdf/about-text.h | 48 - thirdparty/xpdf/3.02/src/xpdf/about.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/backArrow.xbm | 6 - .../xpdf/3.02/src/xpdf/backArrowDis.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/config.h | 106 - .../xpdf/3.02/src/xpdf/dblLeftArrow.xbm | 6 - .../xpdf/3.02/src/xpdf/dblLeftArrowDis.xbm | 6 - .../xpdf/3.02/src/xpdf/dblRightArrow.xbm | 6 - .../xpdf/3.02/src/xpdf/dblRightArrowDis.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/find.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/findDis.xbm | 6 - .../xpdf/3.02/src/xpdf/forwardArrow.xbm | 6 - .../xpdf/3.02/src/xpdf/forwardArrowDis.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/leftArrow.xbm | 5 - .../xpdf/3.02/src/xpdf/leftArrowDis.xbm | 5 - thirdparty/xpdf/3.02/src/xpdf/pdffonts.cc | 303 - thirdparty/xpdf/3.02/src/xpdf/pdfimages.cc | 156 - thirdparty/xpdf/3.02/src/xpdf/pdfinfo.cc | 401 - thirdparty/xpdf/3.02/src/xpdf/pdftoppm.cc | 209 - thirdparty/xpdf/3.02/src/xpdf/pdftops.cc | 344 - thirdparty/xpdf/3.02/src/xpdf/pdftotext.cc | 340 - thirdparty/xpdf/3.02/src/xpdf/print.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/printDis.xbm | 6 - thirdparty/xpdf/3.02/src/xpdf/rightArrow.xbm | 5 - .../xpdf/3.02/src/xpdf/rightArrowDis.xbm | 5 - thirdparty/xpdf/3.02/src/xpdf/vms_make.com | 129 - thirdparty/xpdf/3.02/src/xpdf/xpdf.cc | 344 - thirdparty/xpdf/3.02/src/xpdf/xpdfIcon.xpm | 62 - thirdparty/xpdf/xpdf-3.02/lib/linux/libxpdf.a | Bin 2114500 -> 0 bytes 290 files changed, 136690 deletions(-) delete mode 100644 thirdparty/xpdf/3.02/include/aconf.h delete mode 100644 thirdparty/xpdf/3.02/include/aconf2.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Array.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Catalog.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/CharTypes.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Dict.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Function.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/GMutex.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/GString.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/GfxState.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/GlobalParams.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Object.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/OutputDev.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/PDFDoc.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Page.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/SplashBitmap.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/SplashOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/SplashTypes.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/Stream.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/XRef.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/config.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/gmem.h delete mode 100644 thirdparty/xpdf/3.02/include/xpdf/gtypes.h delete mode 100755 thirdparty/xpdf/3.02/lib/linux/libxpdf.a delete mode 100644 thirdparty/xpdf/3.02/lib/macx/libxpdf.a delete mode 100644 thirdparty/xpdf/3.02/lib/win32/xpdf.lib delete mode 100644 thirdparty/xpdf/3.02/src/ANNOUNCE delete mode 100644 thirdparty/xpdf/3.02/src/CHANGES delete mode 100644 thirdparty/xpdf/3.02/src/INSTALL delete mode 100644 thirdparty/xpdf/3.02/src/Makefile.in delete mode 100644 thirdparty/xpdf/3.02/src/README delete mode 100644 thirdparty/xpdf/3.02/src/aclocal.m4 delete mode 100644 thirdparty/xpdf/3.02/src/aconf-dj.h delete mode 100644 thirdparty/xpdf/3.02/src/aconf-win32.h delete mode 100644 thirdparty/xpdf/3.02/src/aconf.h.in delete mode 100644 thirdparty/xpdf/3.02/src/aconf2.h delete mode 100644 thirdparty/xpdf/3.02/src/configure delete mode 100644 thirdparty/xpdf/3.02/src/configure.in delete mode 100644 thirdparty/xpdf/3.02/src/dj_make.bat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdffonts.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdffonts.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdffonts.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdfimages.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdfimages.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdfimages.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdfinfo.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdfinfo.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdfinfo.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftoppm.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftoppm.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftoppm.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftops.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftops.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftops.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftotext.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftotext.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/pdftotext.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/sample-xpdfrc delete mode 100644 thirdparty/xpdf/3.02/src/doc/xpdf.1 delete mode 100644 thirdparty/xpdf/3.02/src/doc/xpdf.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/xpdf.hlp delete mode 100644 thirdparty/xpdf/3.02/src/doc/xpdfrc.5 delete mode 100644 thirdparty/xpdf/3.02/src/doc/xpdfrc.cat delete mode 100644 thirdparty/xpdf/3.02/src/doc/xpdfrc.hlp delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiBase.cc delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiBase.h delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.cc delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.h delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.cc delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.h delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.cc delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.h delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiType1.cc delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiType1.h delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiType1C.cc delete mode 100644 thirdparty/xpdf/3.02/src/fofi/FoFiType1C.h delete mode 100644 thirdparty/xpdf/3.02/src/fofi/Makefile.dep delete mode 100644 thirdparty/xpdf/3.02/src/fofi/Makefile.in delete mode 100644 thirdparty/xpdf/3.02/src/fofi/vms_make.com delete mode 100644 thirdparty/xpdf/3.02/src/goo/FixedPoint.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/FixedPoint.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/GHash.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/GHash.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/GList.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/GList.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/GMutex.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/GString.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/GString.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/Makefile.dep delete mode 100644 thirdparty/xpdf/3.02/src/goo/Makefile.in delete mode 100644 thirdparty/xpdf/3.02/src/goo/gfile.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/gfile.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/gmem.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/gmem.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/gmempp.cc delete mode 100644 thirdparty/xpdf/3.02/src/goo/gtypes.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/parseargs.c delete mode 100644 thirdparty/xpdf/3.02/src/goo/parseargs.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_directory.c delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_dirent.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_make.com delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_sys_dirent.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_unix_time.h delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_unix_times.c delete mode 100644 thirdparty/xpdf/3.02/src/goo/vms_unlink.c delete mode 100644 thirdparty/xpdf/3.02/src/install-sh delete mode 100644 thirdparty/xpdf/3.02/src/misc/hello.pdf delete mode 100644 thirdparty/xpdf/3.02/src/misc/xpdf.dt delete mode 100644 thirdparty/xpdf/3.02/src/ms_make.bat delete mode 100644 thirdparty/xpdf/3.02/src/splash/Makefile.dep delete mode 100644 thirdparty/xpdf/3.02/src/splash/Makefile.in delete mode 100644 thirdparty/xpdf/3.02/src/splash/Splash.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/Splash.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashBitmap.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashBitmap.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashClip.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashClip.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashErrorCodes.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFTFont.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFTFont.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFont.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFont.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFontEngine.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFontEngine.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFontFile.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFontFile.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFontFileID.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashFontFileID.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashGlyphBitmap.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashMath.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashPath.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashPath.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashPattern.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashPattern.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashScreen.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashScreen.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashState.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashState.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashT1Font.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashT1Font.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashTypes.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashXPath.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashXPath.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.cc delete mode 100644 thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.h delete mode 100644 thirdparty/xpdf/3.02/src/splash/vms_make.com delete mode 100644 thirdparty/xpdf/3.02/src/vms_make.com delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Annot.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Annot.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Array.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Array.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CMap.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CMap.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Catalog.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Catalog.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CharTypes.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CompactFontTables.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Decrypt.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Decrypt.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Dict.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Dict.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Error.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Error.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/ErrorCodes.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Function.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Function.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Gfx.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Gfx.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/GfxFont.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/GfxFont.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/GfxState.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/GfxState.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/GlobalParams.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/GlobalParams.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/JPXStream.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/JPXStream.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Lexer.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Lexer.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Link.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Link.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Makefile.dep delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Makefile.in delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/NameToUnicodeTable.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Object.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Object.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/OptionalContent.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/OptionalContent.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Outline.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Outline.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/OutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/OutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PDFCore.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PDFCore.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PDFDoc.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PDFDoc.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Page.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Page.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Parser.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Parser.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Stream-CCITT.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Stream.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/Stream.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/UTF8.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/UnicodeMapTables.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFApp.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFApp.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFCore.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFCore.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFTree.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFTree.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFTreeP.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XRef.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XRef.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/about-text.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/about.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/backArrow.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/backArrowDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/config.h delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/dblLeftArrow.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/dblLeftArrowDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/dblRightArrow.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/dblRightArrowDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/find.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/findDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/forwardArrow.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/forwardArrowDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/leftArrow.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/leftArrowDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/pdffonts.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/pdfimages.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/pdfinfo.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/pdftoppm.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/pdftops.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/pdftotext.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/print.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/printDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/rightArrow.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/rightArrowDis.xbm delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/vms_make.com delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/xpdf.cc delete mode 100644 thirdparty/xpdf/3.02/src/xpdf/xpdfIcon.xpm delete mode 100644 thirdparty/xpdf/xpdf-3.02/lib/linux/libxpdf.a diff --git a/thirdparty/xpdf/3.02/include/aconf.h b/thirdparty/xpdf/3.02/include/aconf.h deleted file mode 100644 index c0094117..00000000 --- a/thirdparty/xpdf/3.02/include/aconf.h +++ /dev/null @@ -1,47 +0,0 @@ -/* aconf.h. Generated by configure. */ -/* - * aconf.h - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF_H -#define ACONF_H - -#include - -/* - * Enable multithreading support. - */ -#define MULTITHREADED 1 - -/* - * Enable C++ exceptions. - */ -#define USE_EXCEPTIONS 1 - -#undef SYSTEM_XPDFRC - -/* - * Use FreeType 2. - */ -#define HAVE_FREETYPE_FREETYPE_H 1 - -/* - * Defined if the Splash library is avaiable. - */ -#define HAVE_SPLASH 1 - -#define HAVE_DIRENT_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_POPEN 1 -#define HAVE_MKSTEMP 1 - -#ifdef __APPLE__ // Not available on Fedora 9 - #define HAVE_MKSTEMPS 1 -#endif - -#define HAVE_FSEEKO 1 -#define HAVE_XTAPPSETEXITFLAG 1 -#endif - diff --git a/thirdparty/xpdf/3.02/include/aconf2.h b/thirdparty/xpdf/3.02/include/aconf2.h deleted file mode 100644 index b51de1e9..00000000 --- a/thirdparty/xpdf/3.02/include/aconf2.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * aconf2.h - * - * This gets included by aconf.h, and contains miscellaneous global - * settings not directly controlled by autoconf. This is a separate - * file because otherwise the configure script will munge any - * #define/#undef constructs. - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF2_H -#define ACONF2_H - -/* - * This controls the use of the interface/implementation pragmas. - */ -#ifdef __GNUC__ -#define USE_GCC_PRAGMAS -#endif -/* There is a bug in the version of gcc which ships with MacOS X 10.2 */ -#if defined(__APPLE__) && defined(__MACH__) -# include -#endif -#ifdef MAC_OS_X_VERSION_MAX_ALLOWED -# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 -# undef USE_GCC_PRAGMAS -# endif -#endif - -/* - * Make sure WIN32 is defined if appropriate. - */ -#if defined(_WIN32) && !defined(WIN32) -# define WIN32 -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/Array.h b/thirdparty/xpdf/3.02/include/xpdf/Array.h deleted file mode 100644 index 20ae05f2..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Array.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================== -// -// Array.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef ARRAY_H -#define ARRAY_H - -#include - -#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); - -private: - - XRef *xref; // the xref table for this PDF file - Object *elems; // array of elements - int size; // size of array - int length; // number of elements in array - int ref; // reference count -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/Catalog.h b/thirdparty/xpdf/3.02/include/xpdf/Catalog.h deleted file mode 100644 index a34ed889..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Catalog.h +++ /dev/null @@ -1,118 +0,0 @@ -//======================================================================== -// -// Catalog.h -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CATALOG_H -#define CATALOG_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "CharTypes.h" - -class GList; -class PDFDoc; -class XRef; -class Object; -class Page; -class PageAttrs; -struct Ref; -class LinkDest; -class PageTreeNode; - -//------------------------------------------------------------------------ -// Catalog -//------------------------------------------------------------------------ - -class Catalog { -public: - - // Constructor. - Catalog(PDFDoc *docA); - - // Destructor. - ~Catalog(); - - // Is catalog valid? - GBool isOk() { return ok; } - - // Get number of pages. - int getNumPages() { return numPages; } - - // 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. - GString *getBaseURI() { return baseURI; } - - // Return the contents of the metadata stream, or NULL if there is - // no metadata. - GString *readMetadata(); - - // Return the structure tree root object. - Object *getStructTreeRoot() { return &structTreeRoot; } - - // 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 is not a destination. - LinkDest *findDest(GString *name); - - Object *getDests() { return &dests; } - - Object *getNameTree() { return &nameTree; } - - Object *getOutline() { return &outline; } - - Object *getAcroForm() { return &acroForm; } - - Object *getOCProperties() { return &ocProperties; } - - // Get the list of embedded files. - int getNumEmbeddedFiles(); - Unicode *getEmbeddedFileName(int idx); - int getEmbeddedFileNameLength(int idx); - Object *getEmbeddedFileStreamObj(int idx, Object *strObj); - -private: - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - PageTreeNode *pageTree; // the page tree - Page **pages; // array of pages - Ref *pageRefs; // object ID for each page - int numPages; // number of pages - int pagesSize; // size of pages array - Object dests; // named destination dictionary - Object nameTree; // name tree - GString *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 ocProperties; // OCProperties dictionary - GList *embeddedFiles; // embedded file list [EmbeddedFile] - GBool ok; // true if catalog is valid - - Object *findDestInTree(Object *tree, GString *name, Object *obj); - GBool readPageTree(Object *catDict); - int countPageTree(Object *pagesObj); - void loadPage(int pg); - void loadPage2(int pg, int relPg, PageTreeNode *node); - void readEmbeddedFileList(Dict *catDict); - void readEmbeddedFileTree(Object *node); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/CharTypes.h b/thirdparty/xpdf/3.02/include/xpdf/CharTypes.h deleted file mode 100644 index d0df630d..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/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/thirdparty/xpdf/3.02/include/xpdf/Dict.h b/thirdparty/xpdf/3.02/include/xpdf/Dict.h deleted file mode 100644 index 16d3e143..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Dict.h +++ /dev/null @@ -1,77 +0,0 @@ -//======================================================================== -// -// Dict.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef DICT_H -#define DICT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -//------------------------------------------------------------------------ -// Dict -//------------------------------------------------------------------------ - -struct DictEntry { - char *key; - Object val; -}; - -class Dict { -public: - - // Constructor. - Dict(XRef *xrefA); - - // 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); - - // Check if dictionary is of specified type. - GBool is(char *type); - - // Look up an entry and return the value. Returns a null object - // if is not in the dictionary. - Object *lookup(char *key, Object *obj, int recursion = 0); - Object *lookupNF(char *key, Object *obj); - - // 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; } - -private: - - XRef *xref; // the xref table for this PDF file - DictEntry *entries; // array of entries - int size; // size of array - int length; // number of entries in dictionary - int ref; // reference count - - DictEntry *find(char *key); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/Function.h b/thirdparty/xpdf/3.02/include/xpdf/Function.h deleted file mode 100644 index 2d8cc2ff..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Function.h +++ /dev/null @@ -1,231 +0,0 @@ -//======================================================================== -// -// Function.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FUNCTION_H -#define FUNCTION_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" - -class Dict; -class Stream; -struct PSObject; -class PSStack; - -//------------------------------------------------------------------------ -// 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, int recursion = 0); - - // 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: - - 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 *idxOffset; - double *samples; // the samples - int nSamples; // size of the samples array - double *sBuf; // buffer for the transform function - double cacheIn[funcMaxInputs]; - double cacheOut[funcMaxOutputs]; - 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; - GBool ok; -}; - -//------------------------------------------------------------------------ -// StitchingFunction -//------------------------------------------------------------------------ - -class StitchingFunction: public Function { -public: - - StitchingFunction(Object *funcObj, Dict *dict, int recursion); - 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; } - - GString *getCodeString() { return codeString; } - -private: - - PostScriptFunction(PostScriptFunction *func); - GBool parseCode(Stream *str, int *codePtr); - GString *getToken(Stream *str); - void resizeCode(int newSize); - void exec(PSStack *stack, int codePtr); - - GString *codeString; - PSObject *code; - int codeSize; - GBool ok; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/GMutex.h b/thirdparty/xpdf/3.02/include/xpdf/GMutex.h deleted file mode 100644 index 7fa93d85..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/GMutex.h +++ /dev/null @@ -1,49 +0,0 @@ -//======================================================================== -// -// GMutex.h -// -// Portable mutex macros. -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GMUTEX_H -#define GMUTEX_H - -// Usage: -// -// GMutex m; -// gInitMutex(&m); -// ... -// gLockMutex(&m); -// ... critical section ... -// gUnlockMutex(&m); -// ... -// gDestroyMutex(&m); - -#ifdef WIN32 - -#include - -typedef CRITICAL_SECTION GMutex; - -#define gInitMutex(m) InitializeCriticalSection(m) -#define gDestroyMutex(m) DeleteCriticalSection(m) -#define gLockMutex(m) EnterCriticalSection(m) -#define gUnlockMutex(m) LeaveCriticalSection(m) - -#else // assume pthreads - -#include - -typedef pthread_mutex_t GMutex; - -#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/thirdparty/xpdf/3.02/include/xpdf/GString.h b/thirdparty/xpdf/3.02/include/xpdf/GString.h deleted file mode 100644 index 29913806..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/GString.h +++ /dev/null @@ -1,136 +0,0 @@ -//======================================================================== -// -// GString.h -// -// Simple variable-length string type. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GSTRING_H -#define GSTRING_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" - -class GString { -public: - - // Create an empty string. - GString(); - - // Create a string from a C string. - GString(const char *sA); - - // Create a string from chars at . This string - // can contain null characters. - GString(const char *sA, int lengthA); - - // Create a string from chars at in . - GString(GString *str, int idx, int lengthA); - - // Copy a string. - GString(GString *str); - GString *copy() { return new GString(this); } - - // Concatenate two strings. - GString(GString *str1, GString *str2); - - // Convert an integer to a string. - static GString *fromInt(int x); - - // Create a formatted string. Similar to printf, but without the - // string overflow issues. Formatting elements consist of: - // {:[][.]} - // where: - // - 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 - // - is the field width -- negative to reverse the alignment; - // starting with a leading zero to zero-fill (for integers) - // - is the number of digits to the right of the decimal - // point (for floating point numbers) - // - 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 -- GString * - // w -- blank space; arg determines width - // To get literal curly braces, use {{ or }}. - static GString *format(const char *fmt, ...); - static GString *formatv(const char *fmt, va_list argList); - - // Destructor. - ~GString(); - - // Get length. - int getLength() { return length; } - - // Get C string. - char *getCString() { return s; } - - // Get th character. - char getChar(int i) { return s[i]; } - - // Change th character. - void setChar(int i, char c) { s[i] = c; } - - // Clear string to zero length. - GString *clear(); - - // Append a character or string. - GString *append(char c); - GString *append(GString *str); - GString *append(const char *str); - GString *append(const char *str, int lengthA); - - // Append a formatted string. - GString *appendf(const char *fmt, ...); - GString *appendfv(const char *fmt, va_list argList); - - // Insert a character or string. - GString *insert(int i, char c); - GString *insert(int i, GString *str); - GString *insert(int i, const char *str); - GString *insert(int i, const char *str, int lengthA); - - // Delete a character or range of characters. - GString *del(int i, int n = 1); - - // Convert string to all-upper/all-lower case. - GString *upperCase(); - GString *lowerCase(); - - // Compare two strings: -1:< 0:= +1:> - int cmp(GString *str); - int cmpN(GString *str, int n); - int cmp(const char *sA); - int cmpN(const char *sA, int n); - -private: - - int length; - char *s; - - void resize(int length1); - 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); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/GfxState.h b/thirdparty/xpdf/3.02/include/xpdf/GfxState.h deleted file mode 100644 index afd5b628..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/GfxState.h +++ /dev/null @@ -1,1267 +0,0 @@ -//======================================================================== -// -// GfxState.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GFXSTATE_H -#define GFXSTATE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" -#include "Function.h" - -class Array; -class GfxFont; -class PDFRectangle; -class GfxShading; - -//------------------------------------------------------------------------ -// 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 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 -}; - -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, int recursion = 0); - - // 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; - - // 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 . - 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 color space's overprint mask. - Guint getOverprintMask() { return overprintMask; } - - // Return the number of color space modes - static int getNumColorSpaceModes(); - - // Return the name of the th color space mode. - static char *getColorSpaceModeName(int idx); - -protected: - - Guint overprintMask; -}; - -//------------------------------------------------------------------------ -// 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 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, int recursion); - - 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 -}; - -//------------------------------------------------------------------------ -// 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 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, int recursion); - - 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 -}; - -//------------------------------------------------------------------------ -// 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 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, int recursion); - - 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 -}; - -//------------------------------------------------------------------------ -// 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, int recursion); - - 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 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 -}; - -//------------------------------------------------------------------------ -// GfxIndexedColorSpace -//------------------------------------------------------------------------ - -class GfxIndexedColorSpace: public GfxColorSpace { -public: - - GfxIndexedColorSpace(GfxColorSpace *baseA, int indexHighA); - virtual ~GfxIndexedColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csIndexed; } - - // Construct an Indexed color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, int recursion); - - 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 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(GString *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, int recursion); - - 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. - GString *getName() { return name; } - GfxColorSpace *getAlt() { return alt; } - Function *getFunc() { return func; } - -private: - - GfxSeparationColorSpace(GString *nameA, GfxColorSpace *altA, - Function *funcA, GBool nonMarkingA, - Guint overprintMaskA); - - GString *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, GString **namesA, - 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, int recursion); - - 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. - GString *getColorantName(int i) { return names[i]; } - GfxColorSpace *getAlt() { return alt; } - Function *getTintTransformFunc() { return func; } - -private: - - GfxDeviceNColorSpace(int nCompsA, GString **namesA, - GfxColorSpace *alt, Function *func, - GBool nonMarkingA, Guint overprintMaskA); - - int nComps; // number of components - GString // 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, int recursion); - - 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); - - 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); - 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); - - 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); - - int type; - GfxColorSpace *colorSpace; - GfxColor background; - GBool hasBackground; - double xMin, yMin, xMax, yMax; - GBool hasBBox; -}; - -//------------------------------------------------------------------------ -// 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); - - 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 GfxShading { -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); - - virtual GfxShading *copy(); - - void getCoords(double *x0A, double *y0A, double *x1A, double *y1A) - { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; } - 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); - -private: - - double x0, y0, x1, y1; - double t0, t1; - Function *funcs[gfxColorMaxComps]; - int nFuncs; - GBool extend0, extend1; -}; - -//------------------------------------------------------------------------ -// GfxRadialShading -//------------------------------------------------------------------------ - -class GfxRadialShading: public GfxShading { -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); - - 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; } - 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); - -private: - - double x0, y0, r0, x1, y1, r1; - double t0, t1; - Function *funcs[gfxColorMaxComps]; - int nFuncs; - GBool extend0, extend1; -}; - -//------------------------------------------------------------------------ -// 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); - - virtual GfxShading *copy(); - - int getNTriangles() { return nTriangles; } - void getTriangle(int i, double *x0, double *y0, GfxColor *color0, - double *x1, double *y1, GfxColor *color1, - double *x2, double *y2, GfxColor *color2); - -private: - - GfxGouraudVertex *vertices; - int nVertices; - int (*triangles)[3]; - int nTriangles; - Function *funcs[gfxColorMaxComps]; - int nFuncs; -}; - -//------------------------------------------------------------------------ -// GfxPatchMeshShading -//------------------------------------------------------------------------ - -struct GfxPatch { - double x[4][4]; - double y[4][4]; - GfxColor 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); - - virtual GfxShading *copy(); - - int getNPatches() { return nPatches; } - GfxPatch *getPatch(int i) { return &patches[i]; } - -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]; } - - // Convert an image pixel to a color. - void getGray(Guchar *x, GfxGray *gray); - void getRGB(Guchar *x, GfxRGB *rgb); - 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]; - GfxColorComp * // optimized case lookup table - lookup2[gfxColorMaxComps]; - 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]; } - - // 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 (, ) 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 to . - void append(GfxPath *path); - - // Add (, ) 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: - - // Construct a default GfxState, for a device with resolution - // x , page box , page rotation , and - // coordinate system specified by . - GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox, - int rotateA, GBool upsideDown); - - // Destructor. - ~GfxState(); - - // Copy. - GfxState *copy(GBool copyPath = gFalse) - { return new GfxState(this, copyPath); } - - // Accessors. - double getHDPI() { return hDPI; } - double getVDPI() { return vDPI; } - double *getCTM() { return ctm; } - 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; } - 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 opm) { overprintMode = opm; } - 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 setFont(GfxFont *fontA, double fontSizeA) - { font = fontA; fontSize = 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(); - void clipToRect(double xMin, double yMin, double xMax, double yMax); - - // 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; } - - // Misc - GBool parseBlendMode(Object *obj, GfxBlendMode *mode); - -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 ("OPM") - 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 - - 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, GBool copyPath); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/GlobalParams.h b/thirdparty/xpdf/3.02/include/xpdf/GlobalParams.h deleted file mode 100644 index efe3c479..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/GlobalParams.h +++ /dev/null @@ -1,485 +0,0 @@ -//======================================================================== -// -// GlobalParams.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GLOBALPARAMS_H -#define GLOBALPARAMS_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "GMutex.h" -#endif - -class GString; -class GList; -class GHash; -class NameToCharCode; -class CharCodeToUnicode; -class CharCodeToUnicodeCache; -class UnicodeMap; -class UnicodeMapCache; -class CMap; -class CMapCache; -struct XpdfSecurityHandler; -class GlobalParams; -#ifdef WIN32 -class WinFontList; -#endif - -//------------------------------------------------------------------------ - -// The global parameters object. -extern GlobalParams *globalParams; - -//------------------------------------------------------------------------ - -enum DisplayFontParamKind { - displayFontT1, - displayFontTT -}; - -struct DisplayFontParamT1 { - GString *fileName; -}; - -struct DisplayFontParamTT { - GString *fileName; -}; - -class DisplayFontParam { -public: - - GString *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(GString *nameA, DisplayFontParamKind kindA); - virtual ~DisplayFontParam(); -}; - -//------------------------------------------------------------------------ - -class PSFontParam { -public: - - GString *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 - GString *psFontName; // PostScript font name - GString *encoding; // encoding, for 16-bit fonts only - - PSFontParam(GString *pdfFontNameA, int wModeA, - GString *psFontNameA, GString *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 KeyBinding { -public: - - int code; // 0x20 .. 0xfe = ASCII, - // >=0x10000 = special keys, mouse buttons, - // etc. (xpdfKeyCode* symbols) - int mods; // modifiers (xpdfKeyMod* symbols, or-ed - // together) - int context; // context (xpdfKeyContext* symbols, or-ed - // together) - GList *cmds; // list of commands [GString] - - KeyBinding(int codeA, int modsA, int contextA, char *cmd0); - KeyBinding(int codeA, int modsA, int contextA, char *cmd0, char *cmd1); - KeyBinding(int codeA, int modsA, int contextA, GList *cmdsA); - ~KeyBinding(); -}; - -#define xpdfKeyCodeTab 0x1000 -#define xpdfKeyCodeReturn 0x1001 -#define xpdfKeyCodeEnter 0x1002 -#define xpdfKeyCodeBackspace 0x1003 -#define xpdfKeyCodeInsert 0x1004 -#define xpdfKeyCodeDelete 0x1005 -#define xpdfKeyCodeHome 0x1006 -#define xpdfKeyCodeEnd 0x1007 -#define xpdfKeyCodePgUp 0x1008 -#define xpdfKeyCodePgDn 0x1009 -#define xpdfKeyCodeLeft 0x100a -#define xpdfKeyCodeRight 0x100b -#define xpdfKeyCodeUp 0x100c -#define xpdfKeyCodeDown 0x100d -#define xpdfKeyCodeF1 0x1100 -#define xpdfKeyCodeF35 0x1122 -#define xpdfKeyCodeMousePress1 0x2001 -#define xpdfKeyCodeMousePress2 0x2002 -#define xpdfKeyCodeMousePress3 0x2003 -#define xpdfKeyCodeMousePress4 0x2004 -#define xpdfKeyCodeMousePress5 0x2005 -#define xpdfKeyCodeMousePress6 0x2006 -#define xpdfKeyCodeMousePress7 0x2007 -// ... -#define xpdfKeyCodeMousePress32 0x2020 -#define xpdfKeyCodeMouseRelease1 0x2101 -#define xpdfKeyCodeMouseRelease2 0x2102 -#define xpdfKeyCodeMouseRelease3 0x2103 -#define xpdfKeyCodeMouseRelease4 0x2104 -#define xpdfKeyCodeMouseRelease5 0x2105 -#define xpdfKeyCodeMouseRelease6 0x2106 -#define xpdfKeyCodeMouseRelease7 0x2107 -// ... -#define xpdfKeyCodeMouseRelease32 0x2120 -#define xpdfKeyModNone 0 -#define xpdfKeyModShift (1 << 0) -#define xpdfKeyModCtrl (1 << 1) -#define xpdfKeyModAlt (1 << 2) -#define xpdfKeyContextAny 0 -#define xpdfKeyContextFullScreen (1 << 0) -#define xpdfKeyContextWindow (2 << 0) -#define xpdfKeyContextContinuous (1 << 2) -#define xpdfKeyContextSinglePage (2 << 2) -#define xpdfKeyContextOverLink (1 << 4) -#define xpdfKeyContextOffLink (2 << 4) -#define xpdfKeyContextOutline (1 << 6) -#define xpdfKeyContextMainWin (2 << 6) -#define xpdfKeyContextScrLockOn (1 << 8) -#define xpdfKeyContextScrLockOff (2 << 8) - -//------------------------------------------------------------------------ - -class GlobalParams { -public: - - // Initialize the global parameters by attempting to read a config - // file. - GlobalParams(char *cfgFileName); - - ~GlobalParams(); - - void setBaseDir(char *dir); - void setupBaseFonts(char *dir); - - void parseLine(char *buf, GString *fileName, int line); - - //----- accessors - - CharCode getMacRomanCharCode(char *charName); - - GString *getBaseDir(); - Unicode mapNameToUnicode(char *charName); - UnicodeMap *getResidentUnicodeMap(GString *encodingName); - FILE *getUnicodeMapFile(GString *encodingName); - FILE *findCMapFile(GString *collection, GString *cMapName); - FILE *findToUnicodeFile(GString *name); - DisplayFontParam *getDisplayFont(GString *fontName); - DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection); - GString *getPSFile(); - int getPSPaperWidth(); - int getPSPaperHeight(); - void getPSImageableArea(int *llx, int *lly, int *urx, int *ury); - GBool getPSDuplex(); - GBool getPSCrop(); - GBool getPSExpandSmaller(); - GBool getPSShrinkLarger(); - GBool getPSCenter(); - PSLevel getPSLevel(); - PSFontParam *getPSFont(GString *fontName); - GList *getPSFontNames(); - PSFontParam *getPSFont16(GString *fontName, GString *collection, int wMode); - GBool getPSEmbedType1(); - GBool getPSEmbedTrueType(); - GBool getPSEmbedCIDPostScript(); - GBool getPSEmbedCIDTrueType(); - GBool getPSFontPassthrough(); - GBool getPSPreload(); - GBool getPSOPI(); - GBool getPSASCIIHex(); - GBool getPSUncompressPreloadedImages(); - double getPSRasterResolution(); - GBool getPSRasterMono(); - GString *getTextEncodingName(); - EndOfLineKind getTextEOL(); - GBool getTextPageBreaks(); - GBool getTextKeepTinyChars(); - GString *findFontFile(GString *fontName, char **exts); - GString *getInitialZoom(); - GBool getContinuousView(); - GBool getEnableT1lib(); - GBool getEnableFreeType(); - GBool getAntialias(); - GBool getVectorAntialias(); - GBool getStrokeAdjust(); - ScreenType getScreenType(); - int getScreenSize(); - int getScreenDotRadius(); - double getScreenGamma(); - double getScreenBlackThreshold(); - double getScreenWhiteThreshold(); - GBool getDrawAnnotations(); - GBool getOverprintPreview() { return overprintPreview; } - GString *getLaunchCommand() { return launchCommand; } - GString *getURLCommand() { return urlCommand; } - GString *getMovieCommand() { return movieCommand; } - GBool getMapNumericCharNames(); - GBool getMapUnknownCharNames(); - GList *getKeyBinding(int code, int mods, int context); - GBool getPrintCommands(); - GBool getErrQuiet(); - - CharCodeToUnicode *getCIDToUnicode(GString *collection); - CharCodeToUnicode *getUnicodeToUnicode(GString *fontName); - UnicodeMap *getUnicodeMap(GString *encodingName); - CMap *getCMap(GString *collection, GString *cMapName); - UnicodeMap *getTextEncoding(); - - //----- functions to set parameters - - void addDisplayFont(DisplayFontParam *param); - void setPSFile(char *file); - GBool setPSPaperSize(char *size); - void setPSPaperWidth(int width); - void setPSPaperHeight(int height); - void setPSImageableArea(int llx, int lly, int urx, int ury); - void setPSDuplex(GBool duplex); - void setPSCrop(GBool crop); - 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 setPSFontPassthrough(GBool passthrough); - void setPSPreload(GBool preload); - void setPSOPI(GBool opi); - void setPSASCIIHex(GBool hex); - void setTextEncoding(char *encodingName); - GBool setTextEOL(char *s); - void setTextPageBreaks(GBool pageBreaks); - void setTextKeepTinyChars(GBool keep); - void setInitialZoom(char *s); - void setContinuousView(GBool cont); - GBool setEnableT1lib(char *s); - GBool setEnableFreeType(char *s); - GBool setAntialias(char *s); - GBool setVectorAntialias(char *s); - void setScreenType(ScreenType t); - void setScreenSize(int size); - void setScreenDotRadius(int r); - void setScreenGamma(double gamma); - void setScreenBlackThreshold(double thresh); - void setScreenWhiteThreshold(double thresh); - void setMapNumericCharNames(GBool map); - void setMapUnknownCharNames(GBool map); - void setPrintCommands(GBool printCommandsA); - void setErrQuiet(GBool errQuietA); - - //----- security handlers - - void addSecurityHandler(XpdfSecurityHandler *handler); - XpdfSecurityHandler *getSecurityHandler(char *name); - -private: - - void createDefaultKeyBindings(); - void parseFile(GString *fileName, FILE *f); - void parseNameToUnicode(GList *tokens, GString *fileName, int line); - void parseCIDToUnicode(GList *tokens, GString *fileName, int line); - void parseUnicodeToUnicode(GList *tokens, GString *fileName, int line); - void parseUnicodeMap(GList *tokens, GString *fileName, int line); - void parseCMapDir(GList *tokens, GString *fileName, int line); - void parseToUnicodeDir(GList *tokens, GString *fileName, int line); - void parseDisplayFont(GList *tokens, GHash *fontHash, - DisplayFontParamKind kind, - GString *fileName, int line); - void parsePSFile(GList *tokens, GString *fileName, int line); - void parsePSPaperSize(GList *tokens, GString *fileName, int line); - void parsePSImageableArea(GList *tokens, GString *fileName, int line); - void parsePSLevel(GList *tokens, GString *fileName, int line); - void parsePSFont(GList *tokens, GString *fileName, int line); - void parsePSFont16(char *cmdName, GList *fontList, - GList *tokens, GString *fileName, int line); - void parseTextEncoding(GList *tokens, GString *fileName, int line); - void parseTextEOL(GList *tokens, GString *fileName, int line); - void parseFontDir(GList *tokens, GString *fileName, int line); - void parseInitialZoom(GList *tokens, GString *fileName, int line); - void parseScreenType(GList *tokens, GString *fileName, int line); - void parseBind(GList *tokens, GString *fileName, int line); - void parseUnbind(GList *tokens, GString *fileName, int line); - GBool parseKey(GString *modKeyStr, GString *contextStr, - int *code, int *mods, int *context, - char *cmdName, - GList *tokens, GString *fileName, int line); - void parseCommand(char *cmdName, GString **val, - GList *tokens, GString *fileName, int line); - void parseYesNo(char *cmdName, GBool *flag, - GList *tokens, GString *fileName, int line); - GBool parseYesNo2(char *token, GBool *flag); - void parseInteger(char *cmdName, int *val, - GList *tokens, GString *fileName, int line); - void parseFloat(char *cmdName, double *val, - GList *tokens, GString *fileName, int line); - UnicodeMap *getUnicodeMap2(GString *encodingName); -#ifdef ENABLE_PLUGINS - GBool loadPlugin(char *type, char *name); -#endif - - //----- static tables - - NameToCharCode * // mapping from char name to - macRomanReverseMap; // MacRomanEncoding index - - //----- user-modifiable settings - - GString *baseDir; // base directory - for plugins, etc. - NameToCharCode * // mapping from char name to Unicode - nameToUnicode; - GHash *cidToUnicodes; // files for mappings from char collections - // to Unicode, indexed by collection name - // [GString] - GHash *unicodeToUnicodes; // files for Unicode-to-Unicode mappings, - // indexed by font name pattern [GString] - GHash *residentUnicodeMaps; // mappings from Unicode to char codes, - // indexed by encoding name [UnicodeMap] - GHash *unicodeMaps; // files for mappings from Unicode to char - // codes, indexed by encoding name [GString] - GHash *cMapDirs; // list of CMap dirs, indexed by collection - // name [GList[GString]] - GList *toUnicodeDirs; // list of ToUnicode CMap dirs [GString] - GHash *displayFonts; // display font info, indexed by font name - // [DisplayFontParam] -#ifdef WIN32 - WinFontList *winFontList; // system TrueType fonts -#endif - GHash *displayCIDFonts; // display CID font info, indexed by - // collection [DisplayFontParam] - GHash *displayNamedCIDFonts; // display CID font info, indexed by - // font name [DisplayFontParam] - GString *psFile; // PostScript file or command (for xpdf) - int psPaperWidth; // paper size, in PostScript points, for - int psPaperHeight; // PostScript output - int psImageableLLX, // imageable area, in PostScript points, - psImageableLLY, // for PostScript output - psImageableURX, - psImageableURY; - GBool psCrop; // crop PS output to CropBox - GBool psExpandSmaller; // expand smaller pages to fill paper - GBool psShrinkLarger; // shrink larger pages to fit paper - GBool psCenter; // center pages on the paper - GBool psDuplex; // enable duplexing in PostScript? - PSLevel psLevel; // PostScript level to generate - GHash *psFonts; // PostScript font info, indexed by PDF - // font name [PSFontParam] - GList *psNamedFonts16; // named 16-bit fonts [PSFontParam] - GList *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 psFontPassthrough; // pass all fonts through as-is? - GBool psPreload; // preload PostScript images and forms into - // memory - GBool psOPI; // generate PostScript OPI comments? - GBool psASCIIHex; // use ASCIIHex instead of ASCII85? - GBool psUncompressPreloadedImages; // uncompress all preloaded images - double psRasterResolution; // PostScript rasterization resolution (dpi) - GBool psRasterMono; // true to do PostScript rasterization - // in monochrome (gray); false to do it - // in color (RGB/CMYK) - GString *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 - GList *fontDirs; // list of font dirs [GString] - GString *initialZoom; // initial zoom level - GBool continuousView; // continuous view mode - GBool enableT1lib; // t1lib enable flag - GBool enableFreeType; // FreeType enable flag - GBool antialias; // font 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 drawAnnotations; // draw annotations or not - GBool overprintPreview; // enable overprint preview - GString *launchCommand; // command executed for 'launch' links - GString *urlCommand; // command executed for URL links - GString *movieCommand; // command executed for movie annotations - GBool mapNumericCharNames; // map numeric char names (from font subsets)? - GBool mapUnknownCharNames; // map unknown char names? - GList *keyBindings; // key & mouse button bindings [KeyBinding] - GBool printCommands; // print the drawing commands - GBool errQuiet; // suppress error messages? - - 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 - GMutex mutex; - GMutex unicodeMapCacheMutex; - GMutex cMapCacheMutex; -#endif -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/Object.h b/thirdparty/xpdf/3.02/include/xpdf/Object.h deleted file mode 100644 index 598c37ac..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Object.h +++ /dev/null @@ -1,303 +0,0 @@ -//======================================================================== -// -// Object.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef OBJECT_H -#define OBJECT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include -#include "gtypes.h" -#include "gmem.h" -#include "GString.h" - -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 -}; - -#define numObjTypes 14 // total number of object types - -//------------------------------------------------------------------------ -// Object -//------------------------------------------------------------------------ - -#ifdef DEBUG_MEM -#define initObj(t) ++numAlloc[type = t] -#else -#define initObj(t) type = t -#endif - -class Object { -public: - - // Default constructor. - Object(): - type(objNone) {} - - // 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(GString *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; } - - // Copy an object. - Object *copy(Object *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, int recursion = 0); - - // 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; } - - // 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. NB: these assume object is of correct type. - GBool getBool() { return booln; } - int getInt() { return intg; } - double getReal() { return real; } - double getNum() { return type == objInt ? (double)intg : real; } - GString *getString() { return string; } - char *getName() { return name; } - Array *getArray() { return array; } - Dict *getDict() { return dict; } - Stream *getStream() { return stream; } - Ref getRef() { return ref; } - int getRefNum() { return ref.num; } - int getRefGen() { return ref.gen; } - char *getCmd() { return cmd; } - - // 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); - GBool dictIs(char *dictType); - Object *dictLookup(char *key, Object *obj, int recursion = 0); - 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 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 - double real; // real - GString *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() - { return array->getLength(); } - -inline void Object::arrayAdd(Object *elem) - { array->add(elem); } - -inline Object *Object::arrayGet(int i, Object *obj) - { return array->get(i, obj); } - -inline Object *Object::arrayGetNF(int i, Object *obj) - { return array->getNF(i, obj); } - -//------------------------------------------------------------------------ -// Dict accessors. -//------------------------------------------------------------------------ - -#include "Dict.h" - -inline int Object::dictGetLength() - { return dict->getLength(); } - -inline void Object::dictAdd(char *key, Object *val) - { dict->add(key, val); } - -inline GBool Object::dictIs(char *dictType) - { return dict->is(dictType); } - -inline GBool Object::isDict(char *dictType) - { return type == objDict && dictIs(dictType); } - -inline Object *Object::dictLookup(char *key, Object *obj, int recursion) - { return dict->lookup(key, obj, recursion); } - -inline Object *Object::dictLookupNF(char *key, Object *obj) - { return dict->lookupNF(key, obj); } - -inline char *Object::dictGetKey(int i) - { return dict->getKey(i); } - -inline Object *Object::dictGetVal(int i, Object *obj) - { return dict->getVal(i, obj); } - -inline Object *Object::dictGetValNF(int i, Object *obj) - { return dict->getValNF(i, obj); } - -//------------------------------------------------------------------------ -// Stream accessors. -//------------------------------------------------------------------------ - -#include "Stream.h" - -inline GBool Object::streamIs(char *dictType) - { return stream->getDict()->is(dictType); } - -inline GBool Object::isStream(char *dictType) - { return type == objStream && streamIs(dictType); } - -inline void Object::streamReset() - { stream->reset(); } - -inline void Object::streamClose() - { stream->close(); } - -inline int Object::streamGetChar() - { return stream->getChar(); } - -inline int Object::streamLookChar() - { return stream->lookChar(); } - -inline char *Object::streamGetLine(char *buf, int size) - { return stream->getLine(buf, size); } - -inline Guint Object::streamGetPos() - { return stream->getPos(); } - -inline void Object::streamSetPos(Guint pos, int dir) - { stream->setPos(pos, dir); } - -inline Dict *Object::streamGetDict() - { return stream->getDict(); } - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/OutputDev.h b/thirdparty/xpdf/3.02/include/xpdf/OutputDev.h deleted file mode 100644 index 135144db..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/OutputDev.h +++ /dev/null @@ -1,263 +0,0 @@ -//======================================================================== -// -// OutputDev.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef OUTPUTDEV_H -#define OUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "CharTypes.h" - -class GString; -class Gfx; -class GfxState; -struct GfxColor; -class GfxColorSpace; -class GfxImageColorMap; -class GfxFunctionShading; -class GfxAxialShading; -class GfxRadialShading; -class Stream; -class Links; -class Link; -class Catalog; -class Page; -class Function; - -//------------------------------------------------------------------------ -// OutputDev -//------------------------------------------------------------------------ - -class OutputDev { -public: - - // Constructor. - OutputDev() {} - - // 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 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() { 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; } - - // Does this device require incCharCount to be called for text on - // non-shown layers? - virtual GBool needCharCount() { return gFalse; } - - - //----- 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, - 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 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) {} - - //----- 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) {} - virtual void saveTextPos(GfxState *state) {} - virtual void restoreTextPos(GfxState *state) {} - - //----- path painting - virtual void stroke(GfxState *state) {} - virtual void fill(GfxState *state) {} - virtual void eoFill(GfxState *state) {} - virtual void tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, 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) - { return gFalse; } - virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading) - { return gFalse; } - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *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, GString *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, GString *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 endTextObject(GfxState *state) {} - virtual void incCharCount(int nChars) {} - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void setSoftMaskFromImageMask(GfxState *state, - Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap); - -#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) {} - - //----- 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(Link *link) {} - -#if 1 //~tmp: turn off anti-aliasing temporarily - virtual void setInShading(GBool sh) {} -#endif - -private: - - double defCTM[6]; // default coordinate transform matrix - double defICTM[6]; // inverse of default CTM -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/PDFDoc.h b/thirdparty/xpdf/3.02/include/xpdf/PDFDoc.h deleted file mode 100644 index e51aa2d7..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/PDFDoc.h +++ /dev/null @@ -1,207 +0,0 @@ -//======================================================================== -// -// PDFDoc.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PDFDOC_H -#define PDFDOC_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" - -class GString; -class BaseStream; -class OutputDev; -class Links; -class LinkAction; -class LinkDest; -class Outline; -class OptionalContent; -class PDFCore; - -//------------------------------------------------------------------------ -// PDFDoc -//------------------------------------------------------------------------ - -class PDFDoc { -public: - - PDFDoc(GString *fileNameA, GString *ownerPassword = NULL, - GString *userPassword = NULL, PDFCore *coreA = NULL); -#ifdef WIN32 - PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword = NULL, - GString *userPassword = NULL, PDFCore *coreA = NULL); -#endif - PDFDoc(BaseStream *strA, GString *ownerPassword = NULL, - GString *userPassword = NULL, PDFCore *coreA = NULL); - ~PDFDoc(); - - // Was PDF document successfully opened? - GBool isOk() { return ok; } - - // Get the error code (if isOk() returns false). - int getErrorCode() { return errCode; } - - // Get file name. - GString *getFileName() { return fileName; } -#ifdef WIN32 - wchar_t *getFileNameU() { return fileNameU; } -#endif - - // Get the xref table. - XRef *getXRef() { return xref; } - - // Get catalog. - Catalog *getCatalog() { return catalog; } - - // Get base stream. - BaseStream *getBaseStream() { return str; } - - // Get page parameters. - double getPageMediaWidth(int page) - { return catalog->getPage(page)->getMediaWidth(); } - double getPageMediaHeight(int page) - { return catalog->getPage(page)->getMediaHeight(); } - double getPageCropWidth(int page) - { return catalog->getPage(page)->getCropWidth(); } - double getPageCropHeight(int page) - { return catalog->getPage(page)->getCropHeight(); } - int getPageRotate(int page) - { return catalog->getPage(page)->getRotate(); } - - // Get number of pages. - int getNumPages() { return catalog->getNumPages(); } - - // Return the contents of the metadata stream, or NULL if there is - // no metadata. - GString *readMetadata() { return catalog->readMetadata(); } - - // Return the structure tree root object. - Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); } - - // 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); - - // 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); - - // 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); - - // 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 is not a destination. - LinkDest *findDest(GString *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() { return outline; } -#endif - - // Return the OptionalContent object. - OptionalContent *getOptionalContent() { return optContent; } - - // Is the file encrypted? - GBool isEncrypted() { return xref->isEncrypted(); } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse) - { return xref->okToPrint(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); } - - // 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. - double getPDFVersion() { return pdfVersion; } - - // Save this file with another name. - GBool saveAs(GString *name); - - // Return a pointer to the PDFCore object. - PDFCore *getCore() { return core; } - - // Get the list of embedded files. - int getNumEmbeddedFiles() { return catalog->getNumEmbeddedFiles(); } - Unicode *getEmbeddedFileName(int idx) - { return catalog->getEmbeddedFileName(idx); } - int getEmbeddedFileNameLength(int idx) - { return catalog->getEmbeddedFileNameLength(idx); } - GBool saveEmbeddedFile(int idx, char *path); -#ifdef WIN32 - GBool saveEmbeddedFile(int idx, wchar_t *path, int pathLen); -#endif - - -private: - - GBool setup(GString *ownerPassword, GString *userPassword); - void checkHeader(); - GBool checkEncryption(GString *ownerPassword, GString *userPassword); - GBool saveEmbeddedFile2(int idx, FILE *f); - - GString *fileName; -#ifdef WIN32 - wchar_t *fileNameU; -#endif - FILE *file; - BaseStream *str; - PDFCore *core; - double pdfVersion; - XRef *xref; - Catalog *catalog; -#ifndef DISABLE_OUTLINE - Outline *outline; -#endif - OptionalContent *optContent; - - - GBool ok; - int errCode; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/Page.h b/thirdparty/xpdf/3.02/include/xpdf/Page.h deleted file mode 100644 index 7d05bc2b..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Page.h +++ /dev/null @@ -1,199 +0,0 @@ -//======================================================================== -// -// Page.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PAGE_H -#define PAGE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class Dict; -class PDFDoc; -class XRef; -class OutputDev; -class Links; - -//------------------------------------------------------------------------ - -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; } - 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 - // is NULL, uses defaults. - PageAttrs(PageAttrs *attrs, Dict *dict); - - // Construct a new PageAttrs object for an empty page (only used - // when there is an error in the page tree). - PageAttrs(); - - // 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; } - GString *getLastModified() - { return lastModified.isString() - ? lastModified.getString() : (GString *)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; } - - // Clip all other boxes to the MediaBox. - void clipBoxes(); - -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(PDFDoc *docA, int numA, Dict *pageDict, PageAttrs *attrsA); - - // Create an empty page (only used when there is an error in the - // page tree). - Page(PDFDoc *docA, int numA); - - // 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(); } - GString *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 annots.fetch(xref, obj); } - - // Return a list of links. - Links *getLinks(); - - // Get contents. - Object *getContents(Object *obj) { return contents.fetch(xref, obj); } - - // Display a page. - void display(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - GBool printing, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = 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, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL); - - 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); - - // Get the page's default CTM. - void getDefaultCTM(double *ctm, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool upsideDown); - -private: - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - int num; // page number - PageAttrs *attrs; // page attributes - Object annots; // annotations array - Object contents; // page contents - GBool ok; // true if page is valid -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/SplashBitmap.h b/thirdparty/xpdf/3.02/include/xpdf/SplashBitmap.h deleted file mode 100644 index 78f37d6e..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/SplashBitmap.h +++ /dev/null @@ -1,69 +0,0 @@ -//======================================================================== -// -// SplashBitmap.h -// -//======================================================================== - -#ifndef SPLASHBITMAP_H -#define SPLASHBITMAP_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "SplashTypes.h" - -//------------------------------------------------------------------------ -// SplashBitmap -//------------------------------------------------------------------------ - -class SplashBitmap { -public: - - // Create a new bitmap. It will have x pixels in - // color mode . Rows will be padded out to a multiple of - // bytes. If is false, the bitmap will be stored - // upside-down, i.e., with the last row first in memory. - SplashBitmap(int widthA, int heightA, int rowPad, - SplashColorMode modeA, GBool alphaA, - GBool topDown = gTrue); - - ~SplashBitmap(); - - int getWidth() { return width; } - int getHeight() { return height; } - int getRowSize() { return rowSize; } - int getAlphaRowSize() { return width; } - SplashColorMode getMode() { return mode; } - SplashColorPtr getDataPtr() { return data; } - Guchar *getAlphaPtr() { return alpha; } - - SplashError writePNMFile(char *fileName); - SplashError writePNMFile(FILE *f); - SplashError writeAlphaPGMFile(char *fileName); - - void getPixel(int x, int y, SplashColorPtr pixel); - Guchar getAlpha(int x, int y); - - // Caller takes ownership of the bitmap data. The SplashBitmap - // object is no longer valid -- the next call should be to the - // destructor. - SplashColorPtr takeData(); - -private: - - int width, height; // size of bitmap - int rowSize; // size of one row of data, in bytes - // - negative for bottom-up bitmaps - SplashColorMode mode; // color mode - SplashColorPtr data; // pointer to row zero of the color data - Guchar *alpha; // pointer to row zero of the alpha data - // (always top-down) - - friend class Splash; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/SplashOutputDev.h b/thirdparty/xpdf/3.02/include/xpdf/SplashOutputDev.h deleted file mode 100644 index 80d3c66f..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/SplashOutputDev.h +++ /dev/null @@ -1,277 +0,0 @@ -//======================================================================== -// -// SplashOutputDev.h -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef SPLASHOUTPUTDEV_H -#define SPLASHOUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "SplashTypes.h" -#include "config.h" -#include "OutputDev.h" -#include "GfxState.h" - -class Gfx8BitFont; -class SplashBitmap; -class Splash; -class SplashPath; -class SplashPattern; -class SplashFontEngine; -class SplashFont; -class T3FontCache; -struct T3FontCacheTag; -struct T3GlyphStack; -struct SplashTransparencyGroup; - -//------------------------------------------------------------------------ - -// 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 upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return bitmapTopDown ^ bitmapUpsideDown; } - - // 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(); - - //----- 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); - - //----- 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 tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, 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); - 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 endTextObject(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void setSoftMaskFromImageMask(GfxState *state, - Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap); - - //----- 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(); - - // Set this flag to true to generate an upside-down bitmap (useful - // for Windows BMP files). - void setBitmapUpsideDown(GBool f) { bitmapUpsideDown = f; } - - // 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(); - - // Set the Splash fill color. - void setFillColor(int r, int g, int b); - - // Get a font object for a Base-14 font, using the Latin-1 encoding. - SplashFont *getFont(GString *name, SplashCoord *textMatA); - - SplashFont *getCurrentFont() { return font; } - - // If is true, don't draw any text. - void setSkipText(GBool skipTextA) { skipText = skipTextA; } - - int getNestCount() { return nestCount; } - - -#if 1 //~tmp: turn off anti-aliasing temporarily - virtual void setInShading(GBool sh); -#endif - -private: - - void setupScreenParams(double hDPI, double vDPI); - SplashPattern *getColor(GfxGray gray); - SplashPattern *getColor(GfxRGB *rgb); -#if SPLASH_CMYK - SplashPattern *getColor(GfxCMYK *cmyk); -#endif - void setOverprintMask(GfxColorSpace *colorSpace, GBool overprintFlag, - int overprintMode, GfxColor *singleColor); - SplashPath *convertPath(GfxState *state, GfxPath *path); - void doUpdateFont(GfxState *state); - void drawType3Glyph(GfxState *state, 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); - - SplashColorMode colorMode; - int bitmapRowPad; - GBool bitmapTopDown; - GBool bitmapUpsideDown; - GBool allowAntialias; - GBool vectorAntialias; - GBool reverseVideo; // reverse video mode - SplashColor paperColor; // paper color - SplashScreenParams screenParams; - GBool skipText; - - 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; - - int nestCount; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/SplashTypes.h b/thirdparty/xpdf/3.02/include/xpdf/SplashTypes.h deleted file mode 100644 index 6eb26073..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/SplashTypes.h +++ /dev/null @@ -1,132 +0,0 @@ -//======================================================================== -// -// SplashTypes.h -// -//======================================================================== - -#ifndef SPLASHTYPES_H -#define SPLASHTYPES_H - -#include -#include "gtypes.h" - -//------------------------------------------------------------------------ -// coordinates -//------------------------------------------------------------------------ - -#if USE_FIXEDPOINT -#include "FixedPoint.h" -typedef FixedPoint SplashCoord; -#else -typedef double SplashCoord; -#endif - -//------------------------------------------------------------------------ -// antialiasing -//------------------------------------------------------------------------ - -#define splashAASize 4 - -//------------------------------------------------------------------------ -// colors -//------------------------------------------------------------------------ - -enum SplashColorMode { - splashModeMono1, // 1 bit per component, 8 pixels per byte, - // MSbit is on the left - splashModeMono8, // 1 byte per component, 1 byte per pixel - splashModeRGB8, // 1 byte per component, 3 bytes per pixel: - // RGBRGB... - splashModeBGR8 // 1 byte per component, 3 bytes per pixel: - // BGRBGR... - -#if SPLASH_CMYK - , - splashModeCMYK8 // 1 byte per component, 4 bytes per pixel: - // CMYKCMYK... -#endif -}; - -// number of components in each color mode -// (defined in SplashState.cc) -extern int splashColorModeNComps[]; - -// max number of components in any SplashColor -#define splashMaxColorComps 3 -#if SPLASH_CMYK -# undef splashMaxColorComps -# define splashMaxColorComps 4 -#endif - -typedef Guchar SplashColor[splashMaxColorComps]; -typedef Guchar *SplashColorPtr; - -// RGB8 -static inline Guchar splashRGB8R(SplashColorPtr rgb8) { return rgb8[0]; } -static inline Guchar splashRGB8G(SplashColorPtr rgb8) { return rgb8[1]; } -static inline Guchar splashRGB8B(SplashColorPtr rgb8) { return rgb8[2]; } - -// BGR8 -static inline Guchar splashBGR8R(SplashColorPtr bgr8) { return bgr8[2]; } -static inline Guchar splashBGR8G(SplashColorPtr bgr8) { return bgr8[1]; } -static inline Guchar splashBGR8B(SplashColorPtr bgr8) { return bgr8[0]; } - -#if SPLASH_CMYK -// CMYK8 -static inline Guchar splashCMYK8C(SplashColorPtr cmyk8) { return cmyk8[0]; } -static inline Guchar splashCMYK8M(SplashColorPtr cmyk8) { return cmyk8[1]; } -static inline Guchar splashCMYK8Y(SplashColorPtr cmyk8) { return cmyk8[2]; } -static inline Guchar splashCMYK8K(SplashColorPtr cmyk8) { return cmyk8[3]; } -#endif - -static inline void splashColorCopy(SplashColorPtr dest, SplashColorPtr src) { - dest[0] = src[0]; - dest[1] = src[1]; - dest[2] = src[2]; -#if SPLASH_CMYK - dest[3] = src[3]; -#endif -} - -static inline void splashColorXor(SplashColorPtr dest, SplashColorPtr src) { - dest[0] ^= src[0]; - dest[1] ^= src[1]; - dest[2] ^= src[2]; -#if SPLASH_CMYK - dest[3] ^= src[3]; -#endif -} - -//------------------------------------------------------------------------ -// blend functions -//------------------------------------------------------------------------ - -typedef void (*SplashBlendFunc)(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm); - -//------------------------------------------------------------------------ -// screen parameters -//------------------------------------------------------------------------ - -enum SplashScreenType { - splashScreenDispersed, - splashScreenClustered, - splashScreenStochasticClustered -}; - -struct SplashScreenParams { - SplashScreenType type; - int size; - int dotRadius; - SplashCoord gamma; - SplashCoord blackThreshold; - SplashCoord whiteThreshold; -}; - -//------------------------------------------------------------------------ -// error results -//------------------------------------------------------------------------ - -typedef int SplashError; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/Stream.h b/thirdparty/xpdf/3.02/include/xpdf/Stream.h deleted file mode 100644 index e9ea1040..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/Stream.h +++ /dev/null @@ -1,884 +0,0 @@ -//======================================================================== -// -// Stream.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef STREAM_H -#define STREAM_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" -#include "Object.h" - -class BaseStream; - -//------------------------------------------------------------------------ - -enum StreamKind { - strFile, - 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 -}; - -//------------------------------------------------------------------------ -// 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(); - - // 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(); - - // 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 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 GString *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 . - // Returns the new stream. - Stream *addFilters(Object *dict); - -private: - - Stream *makeFilter(char *name, Stream *str, Object *params); - - int ref; // reference count -}; - -//------------------------------------------------------------------------ -// BaseStream -// -// This is the base class for all streams that read directly from a file. -//------------------------------------------------------------------------ - -class BaseStream: public Stream { -public: - - BaseStream(Object *dictA); - 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 GString *getFileName() { return NULL; } - - // Get/set position of first byte of stream within the file. - virtual Guint getStart() = 0; - virtual void moveStart(int delta) = 0; - -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; } - -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(); - - // Gets the next pixel from the stream. 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(); - -private: - - GBool getNextLine(); - - 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 (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); - -private: - - GBool fillBuf(); - - FILE *f; - Guint start; - GBool limited; - Guint length; - char buf[fileStreamBufSize]; - 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); - -private: - - char *buf; - Guint start; - Guint length; - 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); - -private: - - Stream *str; - GBool limited; - Guint length; -}; - -//------------------------------------------------------------------------ -// 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 GString *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 GString *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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - 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 GString *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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -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 - Guint 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 blackPixels); - void addPixelsNeg(int a1, int blackPixels); - short getTwoDimCode(); - short getWhiteCode(); - short getBlackCode(); - short lookBits(int n); - void eatBits(int n) { if ((inputBits -= n) < 0) inputBits = 0; } -}; - -//------------------------------------------------------------------------ -// 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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - Stream *getRawStream() { return str; } - -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(); -}; - -//------------------------------------------------------------------------ -// 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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - 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); -}; - -//------------------------------------------------------------------------ -// 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 GString *getPSFilter(int psLevel, char *indent) { return NULL; } - virtual GBool isBinary(GBool last = gTrue) { return gFalse; } -}; - -//------------------------------------------------------------------------ -// BufStream -//------------------------------------------------------------------------ - -class BufStream: public FilterStream { -public: - - BufStream(Stream *strA, int bufSizeA); - virtual ~BufStream(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; } - virtual GBool isBinary(GBool last = gTrue); - - int lookChar(int idx); - -private: - - int *buf; - int bufSize; -}; - -//------------------------------------------------------------------------ -// 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 GString *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 GString *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 GString *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 GString *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(); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/XRef.h b/thirdparty/xpdf/3.02/include/xpdf/XRef.h deleted file mode 100644 index 5f5a329b..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/XRef.h +++ /dev/null @@ -1,134 +0,0 @@ -//======================================================================== -// -// XRef.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XREF_H -#define XREF_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" - -class Dict; -class Stream; -class Parser; -class ObjectStream; - -//------------------------------------------------------------------------ -// XRef -//------------------------------------------------------------------------ - -enum XRefEntryType { - xrefEntryFree, - xrefEntryUncompressed, - xrefEntryCompressed -}; - -struct XRefEntry { - Guint offset; - int gen; - XRefEntryType type; -}; - -class XRef { -public: - - // Constructor. Read xref table from stream. - XRef(BaseStream *strA); - - // 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, - CryptAlgorithm encAlgorithmA); - - // Is the file encrypted? - GBool isEncrypted() { return encrypted; } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse); - GBool okToChange(GBool ignoreOwnerPW = gFalse); - GBool okToCopy(GBool ignoreOwnerPW = gFalse); - GBool okToAddNotes(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, int recursion = 0); - - // 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 last + 1; } - - // Return the offset of the last xref table. - Guint getLastXRefPos() { return lastXRefPos; } - - // 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); - - // Direct access. - int getSize() { return size; } - XRefEntry *getEntry(int i) { return &entries[i]; } - Object *getTrailerDict() { return &trailerDict; } - -private: - - BaseStream *str; // input stream - Guint start; // offset in file (to allow for garbage - // at beginning of file) - XRefEntry *entries; // xref entries - int size; // size of array - int last; // last used index in - int rootNum, rootGen; // catalog dict - GBool ok; // true if xref table is valid - int errCode; // error code (if is false) - Object trailerDict; // trailer dictionary - Guint lastXRefPos; // offset of last xref table - Guint *streamEnds; // 'endstream' positions - only used in - // damaged files - int streamEndsLen; // number of valid entries in streamEnds - ObjectStream *objStr; // cached object stream - GBool encrypted; // true if file is encrypted - int permFlags; // permission bits - GBool ownerPasswordOk; // true if owner password is correct - Guchar fileKey[16]; // file decryption key - int keyLength; // length of key, in bytes - int encVersion; // encryption version - CryptAlgorithm encAlgorithm; // encryption algorithm - - Guint getStartXref(); - GBool readXRef(Guint *pos); - GBool readXRefTable(Parser *parser, Guint *pos); - GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n); - GBool readXRefStream(Stream *xrefStr, Guint *pos); - GBool constructXRef(); - Guint strToUnsigned(char *s); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/config.h b/thirdparty/xpdf/3.02/include/xpdf/config.h deleted file mode 100644 index 08f93b86..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/config.h +++ /dev/null @@ -1,106 +0,0 @@ -//======================================================================== -// -// config.h -// -// Copyright 1996-2009 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CONFIG_H -#define CONFIG_H - -//------------------------------------------------------------------------ -// version -//------------------------------------------------------------------------ - -// xpdf version -#define xpdfVersion "3.02.27" -#define xpdfVersionNum 3.02 -#define xpdfMajorVersion 3 -#define xpdfMinorVersion 2 -#define xpdfUpdateVersion 27 -#define xpdfMajorVersionStr "3" -#define xpdfMinorVersionStr "2" -#define xpdfUpdateVersionStr "27" - -// supported PDF version -#define supportedPDFVersionStr "1.7" -#define supportedPDFVersionNum 1.7 - -// copyright notice -#define xpdfCopyright "Copyright 1996-2009 Glyph & Cog, LLC" - -// Windows resource file stuff -#define winxpdfVersion "WinXpdf 3.02.27" -#define xpdfCopyrightAmp "Copyright 1996-2009 Glyph && Cog, LLC" - -//------------------------------------------------------------------------ -// paper size -//------------------------------------------------------------------------ - -// default paper size (in points) for PostScript output -#ifdef A4_PAPER -#define defPaperWidth 595 // ISO A4 (210x297 mm) -#define defPaperHeight 842 -#else -#define defPaperWidth 612 // American letter (8.5x11") -#define defPaperHeight 792 -#endif - -//------------------------------------------------------------------------ -// config file (xpdfrc) path -//------------------------------------------------------------------------ - -// user config file name, relative to the user's home directory -#if defined(VMS) || defined(WIN32) -#define xpdfUserConfigFile "xpdfrc" -#else -#define xpdfUserConfigFile ".xpdfrc" -#endif - -// system config file name (set via the configure script) -#ifdef SYSTEM_XPDFRC -#define xpdfSysConfigFile SYSTEM_XPDFRC -#else -// under Windows, we get the directory with the executable and then -// append this file name -#define xpdfSysConfigFile "xpdfrc" -#endif - -//------------------------------------------------------------------------ -// X-related constants -//------------------------------------------------------------------------ - -// default maximum size of color cube to allocate -#define defaultRGBCube 5 - -//------------------------------------------------------------------------ -// 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 -//------------------------------------------------------------------------ - -#ifdef CDECL -#undef CDECL -#endif - -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define CDECL __cdecl -#else -#define CDECL -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/gmem.h b/thirdparty/xpdf/3.02/include/xpdf/gmem.h deleted file mode 100644 index da34736f..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/gmem.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * gmem.h - * - * Memory routines with out-of-memory checking. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#ifndef GMEM_H -#define GMEM_H - -#include -#include - -#if USE_EXCEPTIONS - -class GMemException { -public: - GMemException() {} - ~GMemException() {} -}; - -#define GMEM_EXCEP throw(GMemException) - -#else // USE_EXCEPTIONS - -#define GMEM_EXCEP - -#endif // USE_EXCEPTIONS - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Same as malloc, but prints error message and exits if malloc() - * returns NULL. - */ -extern void *gmalloc(int size) GMEM_EXCEP; - -/* - * Same as realloc, but prints error message and exits if realloc() - * returns NULL. If

is NULL, calls malloc instead of realloc(). - */ -extern void *grealloc(void *p, int size) GMEM_EXCEP; - -/* - * 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. - */ -extern void *gmallocn(int nObjs, int objSize) GMEM_EXCEP; -extern void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP; - -/* - * 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); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/include/xpdf/gtypes.h b/thirdparty/xpdf/3.02/include/xpdf/gtypes.h deleted file mode 100644 index 9f64f57d..00000000 --- a/thirdparty/xpdf/3.02/include/xpdf/gtypes.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * gtypes.h - * - * Some useful simple types. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#ifndef GTYPES_H -#define GTYPES_H - -/* - * These have stupid names to avoid conflicts with some (but not all) - * C++ compilers which define them. - */ -typedef int GBool; -#define gTrue 1 -#define gFalse 0 - -/* - * These have stupid names to avoid conflicts with , - * 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/thirdparty/xpdf/3.02/lib/linux/libxpdf.a b/thirdparty/xpdf/3.02/lib/linux/libxpdf.a deleted file mode 100755 index 24e960c12a6bbab173d1cf3503c7d88b5a75bfb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2318206 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

h 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

ay|55uM&GdoX>#D3@|&K0xU2(y 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 z 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 z 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

vN#Lm-*4i!@{pJ|GIIUH~&ZUNzgwa zadslkT#oaTv+#3+=)0kRkoD){l)AP~;;hB_F58MfRrZYy?a*uY39rpy{^NC6e}=i< z1!v$#_RkH_Z~CI;XQAxto=iX<>X^UKi#Vg%&y(>uzi8K4sgk!Ra>1AJM(-3~;bQ)c zdDz!wvLAZ4>LNK`--F!V_iwD9-HhvwEara)$0en#r+3*e5&pa;?EkfSaaA(&>Gyco zf8C1z61jevi+Qo7iT$`*abM+a;irJFttS^PV0|q5Ym4lQBBF3#LwjjF(0%w`rIyJ!+zQ(Q*`LIm z1z*PbU9i1RuIp!&gD>}U?(GJD7q^SvMZD;LI39(6ZtXg8nOsK~#^FAL+se-}>8}F# zFE}E8I#KVp+0WgmEBm(=|FUVUzZib*lzng1DEN=F{w}olKDvIva~%4umrG@zywnf= zFIXQ1|I40cKK=^v~!t(PunUBR@__671K{oR$wgWPYNbr$C@8K1jqaXyvnsd>oNvL5CaHN*dA%g?fZVSOR^ z1$`2K0p1<>(>##yn;~dRWGx^6ItB`t=!>B56MZ7o|0sIoC-R)=Q*gXk^kX=_N%U|N zc~p+$V0(>l8tL6D(PxA7J<)p+&tr1jkK-6QMt?<^oI&{cPtl)*tr@=$`cl!OPt_fA zTn^i8IqpHd62q@E5L?u|C@|G;(07qf^6_9I6rbngx4WVLZ_($#|M!HS4?l}Vj~qr` zBl>Y17m6M^jQkflMxVMi3MUD+Ulcv^pnl26Z;v9*uL-9E$H{VBk7MEdrVoDpDEdkq z$I5Xujt|RmCVc)qAHPjGED`-t)O#Br4_4#;Z5rp~E!2C#Mm~NUIf?ovAOG3|{YRoN z$3F7~K0ecmb5OD9eeknejuAurX*o`W?GZVKpIKY@_)IF!3tL5h68ExZ^6{^`u&aSwAy^oVnsNAwN2#{VBaek%tt|Add< zZo%Jj%E6<4{73(G{Kh&id)qqRQKTLFt>dzntm7S*S;uAnVIA*SsU6d_!+%CyuWQFo zTgPg#5Qy}Eb-W|r;_Mi(j-!5Wamre(;~kL}XGgtue84&``>S=lW0rMX_CxD<$64#R z>=2IS-=+Vi9shISxUlfvyp3rqZr)M5zN)gSW=nN(Ntq($U7OQV3kyqXYm2v6>`zO( z4#$GR_xhPwZWimakAZ*P7brn_E(gY-CR?AU_#gFsAg|P81EB1+L)e7 zffrXgRI+6PY-4(QAig_pUKbMHmI={~X{)(T2gC4?o{{yp-m}S8rIj!Tcw^cs)R|kn zJ=83Weq(wX_#4-+Ust@htTfbUB9Jq>aZhPkt%D(D+Zp5bZ7HiRt||6bRPC|VN$m>@ zbFDmHHrq_8R%eXuJjGsbS&h9)vUA2ZrfHZA<4_IfJg=g%V$V+TB24NFyMANZb=1W2 z;!>MI7=WV?3oQy=voS3LUT@mBr-ZVqBU{2E8`D<8W^HXnab>W9qng`!2f_}eQ#Cm< zMB4PJh90X~abfkonzF+E6*b;{#g$Inv{gIHyxCbya3rT! z?A=_o=hotyUFdbLJnyav7p=`<(LnU!8QhM0!~1ZTR8=34B!qQy9a?y6RcYB&c(k%^ z@X#PM=B0uhtdAUxChs6eGkfni z(x%Wg6P&R(hdW_g-4n*z>Yy-$pe_o-3GJi_Xkof3jKyRf6~=7xt_ovl@2oJy$-67; zPH3|u66h#r)SO0+sNO}6gpmFT%W>`;NBSf^<7hK!w>Vna`oxhnd535#uYH55pHG6( zK*xl&x290IEv()_Vcmpu(u6$cjtXlsNoR$%o3z8iTG~1-EOYXXbKc@_wyOhOS$)~P)FM2{poBrNq0_k7lKcMPWLFR zP7P-td=hl>5!AKe+=TY-M7%H^9L{92J`QI$c{hi%wD)v4=H#6n*3$XQe=5CbGn!g2+RU7L(MFrB7xV54y?u&D1(Ks^!OK5txv6XIeL+F6TS1n;rC4ZFU>0Iy)9zAEiONpUHUCqFgJQPI{}t22P@O3qh)ZsPIrVi+io9QwT1GnszQV-X)$XeOWqDN_N=u#YX|GS08>t~T*Vl);xgLg}oW8 z^Db?ObAuer++4i7Y=hi&*OnKA=b%h;P-X`L(Hjw6mo`i2WgIK zt1^cfiAn>moM6qR18lhton*RS8>Tr8#Vn7uxum2n5tLrsNA==+#vD8qX}lemYs=MR+=VY zSq*ZU%UVs2D*=XVU`RRHTiz)r8+RA)EHkFpt;N;4YdfgPgnsT6#70Dm-P@S7Z&ku4G@0tk$LYr}h@_FT2U3YRdL{Q5X+9 zHTKGq%BsEQgFRydwuRfXs%poMy=7jrQItBIKB)0L=mQFKm8XShi?`TYW^4!V+*?+& zzOtfv-MXq;ejbWPqWI4Uz@oanHN|`O?x?ESeRoBvw|oPiU;=o0I=Up!q?DE3RJF&u zrQ#to-T=?2l0budYq2+cm8;OG^?A3VT}E~&9|1S3ORDyi6o-W~_Lf)d5HzG6*TL&e z6_u6N8EJzjop&3P`X z+2HYHm@g27I3-#xMqYOD-g2b4BBZ-kd&_FQTPR89unDAgrI9;R?X*R;W?yM(=Gx9r;Cu|@;g(v4T zIz>aBf(c$yZm-_ih$^1IC@^H)G-Aw+z3s$qWFjy&>28~~^6}WRn^4UYnrNpb$E%Ry z>T1l3z&0ju20|XFC-t+J46FbJbx%UkYYZd-&BUgO2dSkrPRSukHV;+Oxi{o|8FJ<} zBMd!j(|O6ng3i&VGO)7`(rZp0SA_yeF z;kFL-I1eOwF;6aeDGjpd$@!Ev)Kg;y>eHU;(*D+(GN@H9C1@&TJG=*r+L#eYHEfW> zv~*AQO|+~Vuhq%0w>Y%YIdj6sVns{y(e`qa6{<6A#_9b2li5Kl*VZ5bJYAfbRv2O4 zDX{_xM+k%xh7hR2SSiucpf_{_{+&_Nxg+Y-Oh;lM1g$%QU#JL#5uRa&5|$CD#h70~ zuLTF(J3yviJLK3tn(0Bl1J#CkmWsM@5)3|hcvjp|wu8@}&JW3HLHN{0RwOiNZCgGB z66#VLnsz$P{NS)BqFa@djnlI}s^7f-7V6pBEpb-D`an>BvyUmoQNcGxjM3)Unkhvx znHMW-)MdORYOi`5V`s_@c6LD{>2GvFBX|lf%*OsraZKnWI9=u`D)0>rhY`-hi6XMI z?E`!Qw&P+DJUvW`oR?*`I8ShsYdb~Q=Ak1q-28APJNAbYQ$NwWEA~|227^1hqQq;Y z#aP*q#GpI&;-!LlLH8;rxGtE$%2eWW)Y=-n1DcAleTx$I z6}&)toR=T#<}*zcqjNkJlh_1qMq4Jd8NzmQ5<~0ev}H+yo)R#L>E!LB?zgR(Q%R;V zEA5ulN~bs90)d8GdZ%2c?JPfKOWPVUaW`tqk~RIN(2I_CQ|d%V%c(TaIP;jz!*;{W zc90%B87Fk&Deq3B{;^XR|` zYE$TGFvL6*4ze|7u6_eK#Mp-0tffu-C^M+VWE+g??Y5!%lSVU}6Ko!W1D${v6tUC8 zz+g{~`K{}dEB|>d{25)gEjB-LN@}oVW#Jz}+-J>-^gR7jp znbz{>@O;sntrjWt5u?eN@>9kM4V)e{1`I;a=eQiC$CC8KC-5X2&lXtHqTV-dd;~pxoY;=4 zpTv%W3%Zm1DF&-Nw+zHUzCyPqVV^^qR_2WdY-1dr8=9=Z*yr6&V0@X@`X0p8O|Z+* z>Bgxu=%E#b;_x8MjKyvco-s~h7qp1c z^t0U$qeVaTDPX{L{r7lpovOKBKQb zP2>M2FIvcser)lYC(el;ss*w@F6{>PAv3Xo9)me3!M8_%i!(3OEMq9%HNqi^tWy0zUV<*h$`qs*NAVJ_`;OWL-FJZ%ozDLCPJ z4Gx#~y8BQ#$hQsD9osL^gPUx_gIwFuP~Snf`6-?9ZKXi&$VD&-XNO5iG$73HCz-A$ zy4VkD)C5GmbraF_W;#AO2&&LnPBB=6-i*+zawh1NP@00T--Bzg;X&?gDCLh%fE(~+ zA#lNNET}=11a3G4zFuS|+s-AId>hXChEae`Yk+*C27{oq)CmZRIM_fR>l$LcMC{}* zhiJ7-25My9=2XxxrJ#ZDCHid7zn9ePuDShe1ZZ_ffUhMQqzWQP}2>0z5 zXJ*hBU`&eBQfNKK!VL>bg7K_5U=g}JX>#?H;@6~_sa8P;kF zF^1dXOgS-*JDBhdq@37HrVyv2-IRi)QSba?uxX$2t5fDsqK@OowC<^Wd&)GlFXdSN zCcQVTKYk9m7Bg4ORn|9E%(_g7YM>_ox)G=yN zrhbAGdq|B=%ULKTbo~m&Z7WtN!D;^x!Z8zKKjE23n3J6ehda^f=iETL9F_L3!kFm{ z*je9(u|fJ5VocB&cfmLJF)BXQ&Ha#XRm1&`Eq!Lbw{8@1=&g3v=H<@9}UHz1JO2%e2siT)zfZJ?CvlXmE~hgJN@L z=%Ix>8&h=V?YPh|ttZZbVH3_xXvpDsK~aY#>48(zY^QZZJ*6)z1mgaiyi9g`HMH@L zl?AojnGxD-+pQ6&ifp7X6Cq>>nk@5c3}&YEJ16?L0|L0ynNFOAd_ll8nc!4Cv7xbs z2VE$bQ5#l|neO^I92>tu@Vh^Vl}bZR69t>sET8vb1ooci;BH?G=0I4@VT1msM7m z)!<7Jg*$6&3vsx&YEN-xh4(<={#4_u64DJk4X}Gug?k^U;V-V3YuJjC-PIdBn@SA6 zF-%rfR#olV2W5%*U0Qr+XLs4|lIjDhaOaMiGW^Y#>Z%6~1JesVxsu;MGV3H_;QP<` zc>)AXETg77_dJLu6y8y`ci(Q~FUXWudiX1@+TgBRqqgMPHP-SIR$sQc;Hjn7n zJIwKErreyJMsVzlUOU`;lkUy8XjJa&eRIZ)y0bklb_`qt9^OflAaXeg$ zzg3(IA8nvSXr_VV!ot#GZ?T2g`T{{C;QQm-PXl#iW|qslD{Gp8k0#g&D7s73ZT z{?re3zEU4j65->ER7N2mvr!uVur(+t(M~`1IR2c1zpJ+uJ_<~m(6X=)dy2A};>rxu zXK3G^qg=)-S40;|#<=r8j1T;ZO2CD^Z-aecPCEXh@rJy&j-s*`m8-oDf6@|pG;-z< zi=`;>ab@9yepcC{w->IjQN9j`0(H?5-+ca^^JmxngPL||IO3a4E)|_uq|%x%J%2Lm zF_rxJ8d+ha(F1v8BZrv?$z6j;6^Qnx~tn=sVw!7#L8^`6SeV{t3*t*Eb z+Kfw;#|J-$;kPb2@|&A|DslN?b!hDiD*oCd=&To1Zw3NxDaBuFSE_sY;Th+Fr2umQ zJDInA`m1>rKYtaRh>UgTeXEz9?`p|buCF5F;5RQne4h9j;75S(WB%7~$lLWxvWWzL z(6HNe-Uqt~vioYOa=|t~Q>oY@b^iRJ!zv3tvf(2VJ~G*d_tm^z-+VRi{$IWdAETy^ z)wi7Y!EY3NMVh|83cv6d4ZWf^a~qAg5~UsSc}4&ChKwu~fp)rDqKw$1A*;Ie3k^Qy z9$eLQSVc8`T}4wL9L$OMCgm*i7OWua4h&?hQ_)T9@mGGoreeu&?$=Zz>Wu+EhU%pH znHcPZItC8aH%IW9R!+FY=J1_9vR-$<$H1H=RFUO6{FE zzS^S`#5a@c-S-2B_!71Fq&@pj3;$Uo&aeMIB+h-cP4A*#FvHL{QB6No(G;hXPLG@B z8|AYI{YW3=Q3dC5f3ehi0b+^{!8S1F{X~mb^0|MRb3VO&Ve(mN#P#U;(Yi-2s?8`; zv2|zH)SB@%p>LaBMZ4Zs(K+gY-83dp9(n#%6$38m?m1NdZY|m3_&XS*Np*D>)gD5g zXuKN7#<=j_e(3PK&{h41na4xj(&tpS(dRWO=wGi9&)W0Dfq4G9ruN{4>&=*2gJY^b z%`sKKZ^cx7>QL#gYpHI;bOFs*e6lDeiWRz36#L<~RZNbm{_3IZU(||^_l)?_7LIlA z3!LYwMHCC!Bfb&DUqt#t$7C!}tVa9~R07X->U$?$U_2bY+?Z!|U%R}v?v>@W=6Y<* zw|`KsjQVf%=BS!yuf-U{9E!u-cVRtoHQ@|^c#|{1p?JXS1FwSCnv_UzAH%pji1`XG z<($?ZeU8yMHDV|}KSH^x`}@lSIX1>5#`Co=$lNyibMH^MUu%wV-&bul@@({d)prp~ zJmrydR#VK}-KU>FqoOEhR5$tkKGlbOQT@IWYQt`~IR@8!-IYRXj+t*W7j;K3ucdsT zecv+Li?NhZf2;?6c|h`#nSu4a>0;%^C*#o@l-svWWzafFaX^=ePgc`5mGkTkDjR-Y zL>uVb(60GI{vKFnBP%ijoUE< z-gku;pP?de$;gWOCh-t&2F8?|bNRq~h*?oz8vQ8qCeV+N*Bo}GQ10qpxZD`S<~&Bc z5BMHYNxm0U6pl~TZNKQi+Q(G9Zyh#35h|)~X5=^PV(5Gpb*afa^bMNByZ?>qqxqoM z2_Hq~*fHuvzti|3p48cjHhtndsFG-m;CQ|As`q3ak4JqewEm$jAECbvV6MhNm&`Hj`JFNTja*fIWYlS%ADwdbL(bJ2 zAI3U(R-acLgwIqOSJ+2jt=qlZT92z`f!~e3>{x}-?MUBcX~x_-S`^HqW9B}L>!q0Q z7oyy%vYYNPl;%1F-@I<`X$~DD+PFiT_pFq7b8%cTVZ346y!(Ce;eihx|DQT< zyT2no^3a#>e8xB`#791Syzm))Tp>OR;Nzap=A-f*@lgaHi>B(szQ$C36=S@V=gqF~ znDZ`2RsO*6X|4;Q^M=mZ7~5D+V`aWH<*4$fXx^dx#+t3Jlr_aFYt5r7^U(TVKv$VY z^<+G%G7#?uoDXnvC71nGp(-FJP%gfW7-`$@^0;+9kdo!e1q5e z^ZnwR+Fwm`*O-g4pO}0u?s`FTSdAEdKGhtOjkQMax<`C?;p3^#=wp%ipj>SHY(DP) zx%jAqk7=LL$5Z0Nhd$u`|I~Br{*B_J9zG6!#yF;lj|TWy{n>m}{6Ks(V!V9t8GRfS z9~j#e-<{CMqvwZz{m%JubFC#iYm8JF>)($*QO)pUtbcOO7(Sag-t=SGnftkk*U|F# zB%Y)2bLk}U@LneP{Bsg>^IMotSd(|WXwCKVH{i zOZf%jqYXZIfAFb&?0iFf_~B#bgmIXAJX>CNK8w7x=cuwLti0@e<+J5w=LU(VBS-B# zFkw7l&v!dr;-eEjR(>`gJ6;hVUFh%kKckNW;-ecrzVjJ7 zpYi-(W}g51(9fUo{9k6C|NG(NGoJs;%=7;Md`x`)pKx6%eT(`A>&hAUnNNK);kq)h zuV=;AP>w1+^*8!5#y{d3fiGkHPZ(F&IZ*P6jJ+}VN&9SLujJp@hYQy-CGUMkAN#~d z419d+Gx|sqA93(e7S4yS#1$X3ZzP%kK>B{H* z+xA<1buPJH-L{tYf}-CS&OffrTa9xJ_H1j`yXtA}HTJ03GuCxl*C{!w_J!>Sc^WCrS>eA4y(--YJ0_}Rm+;#x20e$Do!9DmUp z*ym#WZ2gXLugkbEwvFz6@ckOh!5mfeUFH@ndmi^`gZfwELCk!wkj8u1el4C!_gtRG zJ$8KDxJSj;WFhB7_zK*63h%4v74ek=Um5U~6%?2BGh**I@9G8!q`ut{adO1^ucDxui#5q`&xt7zO9$? zdUoGwUiL%Bzdb(F5z1NW$L z&z0{{7fdtm0b@PSsDC;;N8S5|+>eiMs#C}K{&>Nqh>O->zF*ATTyVdIHP5)WjC*#8 znja6ar{o@SEI1KO3IC6|_kpjnxbpw!CIJEl8(VC#MfdVQDo6qeTm&^h(2E3#5Hu*Z zxg-~I>&+kYM}r1(k)WZ)HYh46+Mu9l=`Oa|Vv9Cbw7A7Bwz$PDc5xS5+~Tfo5pav< z`#v-CJa-a-u)E*iA6~D+XU@!=IcH|h{C%G1Mr~qk*lxMwhh(2HuP*fX>9kAw9ZulFc7nf;%) z#@n^)?Dk6YpSR_9m~!8HJz4Jjx3#_hvvO~-7j|DN+smok=j9`^1~!m1?wEX&zQIfqVP&W#;sS6BH#{U`TpBtF}0~x25zu`pB{c^*D$PYM;{EoAbpNIUw)5z<0He_z~$EvIW z?K~In{tSPG%18{-&ziFnym@uwGntn+zn*!S_sqx4(>JU#IB$yNo%ABlZe`EDp>wbC zk9jk&;}p-^=4CS1w|I4F`sFzD%vjc-!{+@R)}Ho6nttaZm9=A()TimGOB*Nuoaeu# zDn<4sp+sk=Jbw*szL)VL?^zTzCJJ~aQl>Ii{6eLzSg6v?bE$c9zoySyVKwh98OLE& ze4p69VuL(On(NGMbItjM=iyCJ?D71__krupGkxLz_jWVR#O~Q0*6z%%b{D_z*lo{0 zbKkOdXNJ`r^L$Uw$#ZVeeSTWIi+29sYwvqFqiDO+t=$8=*`1TLyEtmvd+vqS?tx)- z{d37V^!m*`*q!z{yXC&{f8;0k*!I4z$l5(<#og9V^t%*uCfaj!7$2j3XU~xHDHvJt zq8em;y6EHPSO3zepNVKcnjQ7mZ~gpaPM)dntRI;3S&_cK@t&b{-A@;p`BB~zvcBZh zYn%1|6zl&*r}TehLz`D_GW{`2`~Qk3c^6@!JX-OJCn!Q@LtLzDBPyL<( z&v%>tXb#%9^DnhK`Od(~bzxOF-Pr>= z?;Wh%M4I=0LdFB{D3M+5$ZjQF&flr_?qsr)wj-=&en489cdz24albnAO=oY}tL;Kv zw!R0D`9q#tHDB{veYT zEgOuknY(yjD!c1DQP<~~d3E;tJnvPeFRzp5H%08Zv&Al^aP>3Fkuv@tur1r#mW6HY zU2Q9R(AqXDY1=HhzZKisPitFGe%6AYZBXK8HAz2PzF+1Qqi@Eij-TN>s$TawV=mOP z{9stkc*p5;d7nt~nDdCqbBH`I*gP5BnMnF+d}76(&-=u+gJhmMrBD2?$L|X6k7Pcb zu|w+4_}ymuyl|DY>#4`@%sqPiiVt|}(ErLG@3wRLj9mJBd)Gd{ZlmdgS@V;9&iFHZ zzWt1S&YFJOxn&c5{+RCbc(Tv$Zcp}kSjNA1e#}qy_ub45*L>jj~CrFckG^pd(kd)c5l6B@#k!rZ<_8ID$nN4o@Mj$ zqk68fV;4Jjt$4Nj`;xQl_@C*F|7*SRpM2+|`}mhT!=c=(ai^x|rJ=uSY}%2$x0ShF z_Ik{#Ib$Bx@85-JlY-?Jv%hF@Oa{aQ>UUAEc*s?;pti)b<_ivQ+huA}Tai_eFNgeuKzyY$K zWS_X!;(=!B!`%M7j6?B9-8c4b)1L#GXZ(9p-d&P4*uA@!HlU20<+lVf@$t@yrAjRg zsuA-pKK@zaTKbMR)_LDHFtKmvXH7FwpUU5%wuukQJ7w6rY565e&EsA2<|k;U3wcNB zaosMhgwvL$91JZ*yg896^{Xc?y*WQMG=_aDd^tYAp5p3{&7R_#{_>6!Wrp-#NbenH zd}8(v({Gb^*=}5wdHJLb=#FJx7FOY<-W~#sya)h z{mkCuTA4qRZPk4(leY8bjz)J+^;w&<_Xyg3hw{cqXmj&|u$tZq$24VL#vR6AoqHDCQ(Jr-mPP|jNNzDnArt0ay7o%CXJhrEj# zR?~hUC~bva+G*NjGABt}u^-A6f0BI>V_t50fE@#GY$`6We z&wg#g=H@-k_sSWzV7j!i=nmmf%~5#^zsWg(c~{SI%mq!q zPwt<@b~(pjz7q1<6kiBQyDcB0(h{pw+RV?V{^3 zBgQ+wlc|fem95*1dBo-0xC~R@8B>TWuyL6-ZnR#XmeO9{e#!2AJ^NpJxpRNhr;|+I z{e-^TpX@tnyQLRQlm2U4I(}wj8(-*Lg|A)J41I$&dY9Rkgf=YQ5NcPw!z$m~e+-a$ zVbUK|?^5Os+FE}P5PEd!Ci3+n-}81Z^z!v0pL~arrG5C3rCZ5Izvg@QqXTVuY2-^| zU!#~4TgC5<&o{I)7N^)UM`3qR-V0puJC&x#M$0n$4)gR2O`cTzJGDG1zjQnDfso2n zW=wVNa?*A%KHekEuECvKoU{(oUMDTZ%E{i{+O(8$SnvbV?B2bz#z|wYDp*6B-Me?n zy6wsF?7X0Xv|hH%kdt-D>ebV~bw5?7W&mX6~LE1Sst<6bej-U1%X&E+6_NiW(14w(2wEi}& zr1c`!{)Ae@xL!>-(3H}re$3q}JO8oN{ouqYkEQM@T zuA}?BuDS=K`{W+%S51BU)Q4tt9xR@U-FK_6WA{Mf16DQz$EA%lf4ao=k z)S8NIrp;-Kz^1SYY;)SGH*M8QS@UgM4X|a&9F!u@Rh+!ir)}gN-7T-^Wi4{%7SsP5 z$m{jLSFYquC+`BM+;qy_5>}Jm>Q-(#dF8$@+sWI9yv#e3p6Qmi4|#*+)pM6_r*(tUEpK1CjXwS?;glH590sG{8nA1O}d&NFql)V9aH1Dh=@6b%5Ua~(5tE)Eh zuFODr&ca;tyo}8$cdLQi<7z($wZ!r5%P(Y4Y1gu=oE);FH<(8cCYA+)^s_wQkneJWywi`~%hw3c7|WD&b55G{j`8=&^K@OkXRzJRj4yYd zX!r3IAY~5x{GGV>9M5}>(e)fi8KKR$9WecnyG_ox<_>hiN;%ug zeHMH=e0%-?<6b|rV;zz2$)PlvPZ<;C$@MC4yS_J-dCI%P zllwB(1kdKC&&)TvUC!?2UQf=ljt^I5(|;x6=du>COmGh}bs*11(#>2oZibzUiu7KB zXNlzD`N@pjuo|cLUzBIoTX`n&OV-CQ_amFD^gShYOp*PhUK8xRirm`d9qjm+ZX4D` z+9o5c#_Ri8+g7yC_!-Hz%9Z=WQhkTS`td+H?=_~WvPWE5kt4SNieIno7bI-5mZTc*YK1&Zx zy*$nP#$DQX%pet*@`xHhSmv~0|D<6CMempaS%H~WI@cd%n3X#-9Cc>Vm`tdDt9wEa&sa=uj+R(Jp8`aCw0)IIjC z&+E>6+3J>l*6#*L{T*F{_4-ZS!YcPIS;x(uN)Q(%jDM9iV&5x~ zNq6C2U&EIZGN*r5qOQmc=W>^cZ)9Z3UfJ|Z&Z{D~;&J&MlkD{(d&S@2H!?>i1_zKW zo|s-)uFElH+$Qa+_kG%L#;r8{dD*A34=}!zbDLA`#)iW8ScOQysmnR`xMHTc>?w}?`Se|HX>To0n}&6&Ne%_;QzVPo^okBn^J1CHz( zM>g6`R{ZU#m3`jIwmY)(9NCMlY@ejwsx&LR#LAXCvKJ&}M}N>w7QIyitn3w5Hp`PW zXB*nb_w~^~2qiMpyR_9`tFmTx?v!&jKAC>RlMSoOHac<*$fbT>?q{+W7rE_@T+ETX zB1HMfCjCN>r=P8{a!sC`wRN;38$hmaH=WrtJAWo;HPM;x$%fVFkCSqvUPotkC}HMf zkvHx0Gwc89j{lE#{D0IM@i}z%^L<#``qTG}zCL>$eJdS(^F#O>a_4lD`+=2P=g7@+ ziqez2YMF5OJ~ zRCjCJ1v5Ke_{7NeKIF-U)u{E3TqSM00NL5TUfo77ylmyRdU96hEskssa<$!bmZNi} zm96n)(K$RRcgZK{EJt=uH=VProPK5{bFk5Q>HCiCi^whNrjy@jdEq=G+v{Xf=cUg% zax0O$`tx!--nMeP9JwWq+$?O3i%x56is_Rb8?D@GN6wl5E;--yr&{dG{i({X7dxU> zw#bon=D&;Iwz4&jtX(g5Tx?|rc(SIAE_pR+^Tq42w<=lJ6h$3cXLkPN10$QZ-;)ii zOYU>zB9af;>yrH<_j*6E^Iw`j|5=^aJF>&O>I{g^waD7}FU^_%E^+3+tPdn#SDkY2 z_>(Et)={3VM(4%vBz0yzhg?m!dTv3smyu2V(31_Ti#I!ROVGIm*`luX{P7!BZigpl zbvpB3))ifK>UwUU+4*BT|E2o#A3Ad!oxRYxy{k^C=a1)GodurGu*&)*DL2xt|LS(% z)<0G4Ha_@cJO8CR^Iw)T|BbZkzgp~Zuu>;Fi*{`>wb>(W6hyV=UN zIkM9on=i2bo9*cR(8}8NKgD1Fsc+w;?1*=)?4?QBYP*&`KicXYnAAJcS^r1a^_bt^Wsn{|~E?&iX&XuK(%|M>c5nTK^9?{y)<3 z|KWE1_ve?i(4VTat*l-D1OECSRwEq$AO4(etGLz6ey2KYWdo+Z>PWJ_Bb@brc!QPo zY!=xfBm1LQt?V{OHkxd!;S;UwRZe{uSlLxpw%(I9V`#+ir2Mc?7zei{$1UsmU#nR+ zeq`r=^Ui|VgAe~e%l$$2^}}A4e8^t!>(y)3kIqMDrryhQUpKS!Xs(3lErQ zT|=330{VU0E7%K%URL4IyQ*+vKow2AxGbajTmRaac!E0^?l#v%ROo@1)#RC-2lX?( zDUSyRChiJkE{`CS;90~JRmk(SqQo@L_jgm4z5C1G$@g^jzK{AAFCWT(a<@H|cW_cT zn{!{tT|h|A=go;C36CP2-kivnF!!HB-ldJ?zH`vb&Nus;^UjF-D2r!|`kk3=($--$ zbiTADc-y3Ql}ftvZqA5X%z10@Ti*Nd@?Mg8H)q(p$#-*xSW3vD))~G-FMyJw~%{BukZHoTR~m#*}Qjl96mdxgF?I2^){W_Eu6F>^=Jc}PDeHqYthUST)BIt0uFM^1W)duQ$% z1Z50Tw*D@n^+L{r_W3P&Gt4_;yl;$s*vbAl_>O$5(Dc&bA{mF+Rf+5<@i8sy+tazv z+GF1#=sd{XSBHLg5Bn#*BhMKJKPNKgZbJOup7-^40z>WlyMNQa`K3QMN?nj2u)K*e z_ie><@N@Tzf3NrjP5Hf`eX3vAoeqFlF`1M6gNgwFgcrdIkeBIhONb4PrT<=%(?+xBN8ulF!py zA|>RTZ}SByZ{XP)Um-YoATT? z*g!t-{exlH;Fssv!1IvzhjV9j#3_Fpa&~<4JXmb#;wyXml7FX@e+T(J|35|kKhihn ztd=`PnY$)E5$P~czfRLGIrYvsK6FH9dHgM8eTo7wrN(dcyi zKXM?fzIq1#|K0Sk>gV`>?|>I=_egIef|oo3-n&) zH2M};xm`)$Sjf1#zb7zp-f}DNU+{YOs3p zUSVZV)!zv#*OZhivwkwL*BRtmtXzR3mtp$*D{q`ZuGPwAICA=4A*{ag;2Gpr8@b;5 z969S>U%BNBa&1;_gCjTD+Ud=Ir)rnAMlLPQkt;HCU;f|>`Zid7qmq7BRvK1ce!>_d+m4Z(q}+q&NTja*#6n&$aR?doImRf_1S6V zoHe3skCi+B400V-uGrD1&-Gz7;GHwb?Xq%%9J#|r-+;|$klStKQV%(DcHSRQc?P*X zR&Hyu{ma?o4wz_VPSIb#dNZujN|JiY?RXq;rt!be=yBJ~ayuTsQuTYb*B) zsm|V@JZ^0L;(KS%dDQ4k8Rpp9WaWNv2DuYPE^x$=YqN3*%&kyOle`{Lgn6 z`rW23{kYZ2dHsKiehj3E+|16uujCzD$G6LO8rk!_{m&`p)(b}7%|&-3R0Q~373(|3U;CqHZVd82JRo+AH;-0K7i9lH)0yD~pHecSWi)aTpq zsFi!!%AKkW2bwl~i}_FO*Jm*A{H4!VQ7%^aTN9kiu=#>y9iqI$k{Oe7InU-g@dd=| z{SWbjocIOAd*gp^*XQ(6&XfFI3(k$QUko>4#-bF#miOSiQ`y7Sb8Gg&){1?qV!+-{zpL2KfVJuAjDl-C=uv1=jik8{K4J8;FME;t0VV-yicItJ>k8}P+4G< zcP}D$Z{|+q{1+q~Y6_IF?(uw8hg%45#P+3}w=-zZJh_9!7v8`>0}t%vos)LenV9Pe$KqTgNY{kRsa6_m)6Vg;!OHO=gCPg$~SSH`zUX-v{9&K z9y&8$;2YvJqvs26SUpj6q!X8k4Psxw#D9@7FZU+BI!Kql-yrGo{Kre5Wz*Y9x9?Vb zVF~H_xqMiCk^PI7Pmn&q%FlP?``h$V(g)h~iOKZyKCtQeqz|&``nO@QgLOrhJ&d%V zNjvw`r0(;cv*~H153}j-IO%IldfFk+PsEMU1XdN}t=J<=9n zhy8x>T-*QW+V)M8`pY{%wEwxb{^#2Ir^&h#z&=HuxZL6HPFY`yz76D0zv?Q!hZv-q zpc<$iYFxuho>0sFL25173ay6Pxa)W^w0>Tx>HBlfGj{Pk4E2|CDZgE8Xd9%qP?xRH zCS+Eb{QdD?sYmKs^2uE<;r^B4cXHQ;?^Q_oHct(Aq5?aj^3S62X-HNd#5@=co(!A+C!dw#2p}f6uA@7$p>}@Xp;c_ zAIO;5`TMuQfsptiwq?9YALw^iIMZ`Zw|D&d{w`%d`NZEO-!o3W3yu9L+eo)QmtpJw zMee#Je+u;vSbxi?G;Nc)*`_s8XR#?OH1*b9leoJhp7G0k!u*+dsq-j){kDv6=Ad*l z#ybyVMRsRLq zq1SFGNB$z@t$znfyU90L`O)3<^Iqq?`p|2ShOo_!-+=s$3a9SpOf<6nK01YLQ|Pq~ zgOKH(QTmE^C}}g1H|^H%(=m_u^D1kp+THq9bH~d%TS&Rc^mG3HOTQ1~`4ita@LqiW zNyg?a@(hG`z<1g5Tg~0;xvv`R&;2Q55*chbPwbm?SN=)rv>JY}+%HQ%$@_wob)GHD zzJqq|a$APfPwde0x?fx7wZKQj4)eSA{ok^(_=dfg*1w~Y@u^vV(;KW^^8IG=?`rtZ zu`>3_o<`o&l(l$f=L!4WLjO;VTt?UL!+p7aP2@Gdza(on-#goP^b@>)^X`iMv?abx zTiU;sbZ(`wCnHK)x4#S3e~nF>L0Y%JXLN3!O&h&phsu~Vg?IFM-ox+j7szkE*>-x9 zx(8Rh%-`VyUR>ztZ>-esPc}kvLQ2rVA zh39NGb?JAD~pZbZ=uKh_O8*h((1|YQBRk??(>0dqi%ZoeQfI6w-P<0ochT6 z@;|6gpOvT4bD!1I3q9R_|E8b){fqSX@df?&Fl@i^4CC{@FthW422)o03)5zjuZn>vQSXC&=5y7g(DoC1mbQpJ#qEAYI0P zocEJWnYWnVbLjpXYBM|Uf5F(^=Tph6e~VxP^N{?8njXjLy$tqwhj!}rTReU3-+$}# zGXA{n?EE?1j{iRQo!X!KJZSv6kMw`H-+@VAZ*9Gvw3A)^GkvK|%UiKO&}}YFw}1bw z&jqA)n@iK}-+$}<>56rM%(JP(%+BX#7+t+zKUE!=a|@YoSzmg;ZtBu|BfkkTNPJoP zhdwS@!E^1i(Zzd;Jv+|3J62 zUe^D6y-!-Ot6Z=1P2GFFLE5mcX=(QF`}KN`w5+aaeXg)_4~81$+krlnUh z!g_1oI|#5o+HXu*Gxy3lRnCn|D^i}ig71kWZRNM0N-SL^zde=4Zx@|1y}XC?a1ZID zdPvVabNc3^J*4mNA$?~L>FqtFxAc%+(L;J+59!%Gqz^cA`lb^-q#x)Zy`zWpO+BQy z_K+U$A-$-F^xPiO2c9|o$&)>#AM7E0R}bl1dPra0LwZdQ>BT*yhk8gK)I+*DbNUm9 zdPv{hL;BVp(%X7SukRtfq=)p$J){SFNKZR+`o_aOr0?k=eOnLdYkNp<>>+(Y59#?m zqz~&MJ^jq-?MHe@-`hj__8!vL^^o4wLwacs=>>QmJhJ5K>Z&Fx?sfp%v(a|;C(dg?kwwQeN zB0pwvowa6Kbwh0|TC1wE$Bxa;9v8o?X3;{CDtg?A?yX0M1 zZgRVMXD^J$Zfl5|{A0W2k9E!8HE<Y*rPH#&3_-$I2qwhMbA6y^-2jByJ7%^I40l zvL$a)zs_q7?wZ%LLh6W&W3!PlmLz4m=TF+L^IOB`E~#8t9apL@J1?7me!CUNDx-D2 zjbn3M8|x*_+L+8YqdpRkmDxVXaqTntjY5;Zd)}mNIH&M;qO+$t30Jk}TTTDdmimXkAPOu^;x*7S~2}xf-pmcuj@)>J-8H>Z)o4r&LDD zYOAZ%l18HzT3NI_7LV(4ys*upraA32t-QKEQdSnNs;3+y;$>6QDq?Dy-=rpb znoTW0Z-LcSK`NzOX0XfLqr#RK_C>^g4MQ-eyrVh@WvS zWPR13Nu6QqG{Y&|342AT8BSmMVVgR`sq2hIwUJxv8??PMY`+<_`fR_=uzfZI9}~L; z9Tl4QI&g-k$Bt2|qONu9z1F7BBz|V3rbY^!*{wfj+B}7%74l!9ZHvN4<-&3V3T>Yj zc9SclZiuMDx_G3n!b4M7p)GS3>9fqVW6>nc^3oglTL|R2&g#6*>bkC*uIp_6>ufy@ zn#k)YV>V^XX7J6n4n5nJXVB!EZToY!(>_kvYM>0KvHh@3ovo)%Tb}L1*&1zJMRl#r zb+aoRXA|D`?d;0vV(9~owi9Pp#`L^w(d$|@+qSDgQy~+!x;&d~o6L6R=OT0zF)tRy zz&g<8y`K2%ZFmmhIkuhV*mj@Ot=;E1K0BwPTFpr=4{DArXD;Q;y*iuqJ6o1i3A3N` z!{eNAt`pW95}SX#6F%sZCaJJE!VLv*Rd_vu`SoJE!VLv*U_8n=*@NX<~n+{ zsMVY2=*@HV<~e%vl6tM5%(Z@E&^W+cXAPh0jIFudd}(fMv0f|YTE8i#^NS-5s@Trq z#kTC?ZgRyHW}{JT$CgH~4B47^VTJ^ph=i#$NxOXMkj2gk#)wuANI<&V}719 z=I2?v=5-tM^X!Ib`7>DTTf-fzDCRYbHF^iN1NyAw`2VVWN)x>HxjkKD8sW&G(sW&G(sW&G(sW&G(sW-=&Pja#yy*Z9v zXI$hs<08iy7dg(j$Z^^v$7z!sr%iI4Hpy|?B;?E$A!n`#`Fh9FIx_xP^eyIS%$qRI z_Xi1k?Mc|TN5WoPN!V*E343iNVXv(u?6sAI-7>wl%A3HJ!}f)Qy*`p~Qdh3u<`VD7 z`t3}7jw74n^{>P`<>Vx7&do{MoST!hIoDqoL^f%2ZjPhZUl+(T*3moG(L2`BJJ!)V z*3moG(K|NTR=NJVAmuxH{dIwOzpo|i==IkHiFfq+b35_=+%929)}PxY-j#K1_I*k6 zIPK%l=fwN-xrCke@#k}iciP9F&n4c`<=Z+dRjA@*MxkbNnaI@t-`$AM%`b9`CQYc@xI_W1p~N^LT$9A>Lm{B%HK)yuXe} ze6pR#`|AktPTj}*>xjfB`*gg&j!1m6PsjV~h{QX3{dGj*9licKLcG6@NI2QQj-)Lbwt8WU7Y!cW060fOmO^Rf-}Y^IAeT* zGsY)4V|Icw*G+JAO>lKNbKL}IuAAV@brbycC~pGCG~c$6GuMUu^+@t0+b!g;M-rdx zqmbjzA%Fiy9%o#KoN+zTpF_syjP=JXVZUw1=Zy2m=J*_DYip;3y>^zc*LUM{l0H0s zT#oOn<8vpPeWpDhMB>pJu8R2U@8*75qdo0J?0G3tSre_Ti&V)2A3to*29c`8aklYF zV?4U3-V4{p7FWPTs;cXw@n}q+73{f-Yp>es#^`Mgk+|a7h`#gI=$$2MYpd^ASj~+m z@)9mz7`Lp?msj5**E&9LRr|bE@AC~cUS1=p%jKLHyOT?QuN=>Q(dpSQVT5)5hMICw z>W3HBN!1O1d$hKmq9S!=v6wjnnXo+{M(XOLwXwQeb$%PJjOZ$ouYm@RRo6;c(q>jh z&Pxj;Ww+XEC&IOAp*@=|W{`eeG_#6yWkwfIVu0)wf2g%w@$w zrwtc2#N$zFArHsOtWVh^FMKUe2N(0~hKpZ1v&<&&D8qm5QRbXs%batum&H8wK$fQ; zv8qL0*J+-|qILC4^pMcJW0or8{!faQRD+c~#f{a(mw0?lyrIs7?c*p_7H<$Y;2Equ zEwEV0u*`+oO|Mu#24H18NvR$aBYwn0C-LB3{**Aaf0v5pzZv^uKD)8Dd& z+S+JUnW$A|OKPW@r)N5RwLCi`&g&Wp>*s0Wbmfu7G`NQhW{F!Ezs5ewk+7YOh`0Sw zZl4X6M;F&dX|HnojHo;oq4wp$vze`6T>J8`jf6d9pYq zlZw3-QBm8XQQIz2$2aj<{~2V|QBITT=Z{e{1uKoo>KHy*9mBi&ZQfqIEol zj?_oRSE8;RJZ{0yld?>g(Z;g4yjNk+_>v9li9H!M3zXr_#Aw1^e2iI`@yi+{FE%Wq zf-)`_!7N%7gNUcM7R44f)J9GH7V%&-TE4Ja77P=vjh4{@i(>M$*Pw3eiaH(VG`Z%T zCfB@ERfRf;^@u^fi1#gYdGbDnGrvfDmonhHl)*e)AJfx>;xR#$%zxsTi|sSP#nzV= zTVGo2_|jr`0udR?tHlk{c$G2= z^d79QB7u=mmxj@=c}NUa!CQC)p&WMTE~QENv~Mfv3fmM#;WRN zNXoRQys#{kURc&RFD&buglp??E!&r|s@uIKjkMd%(xJ<`y{Zwc+-jd&-rCJ)Zk4IJDvqm|_fn+7aodIrTK()Y zZhbG_O*W3dNgZTj^w4vj_#!hu$78j!ja0nOq2kqxdHF|l`C)dNepv6NSTPq%Ve#ra zqg9KeDsDGYai^Z~db0*Fr6}8Vpjp2wV^y*oD?z#Au5{!o8{qxbTf%i>kL-5cu%4h~ z-LA6jP!*}+EwI{ZyiipwtgDf(tFmoU)vZmcVpY0d1(TjiS@7;WAiQIms;aKSVyn^ZldA2rnd)u>lb4S4xT&_!V>NPc)o2~G+CG=H=((+8Hzb4y;eAn7 zbY@R@GZl-yRnbMUdb7R|u871JNu1xLg#G3uOw+KHH)Z%OLVSHitXA)#t83VG+C64< zZ8=K^LtSjBEw5z%-w+o@^w!o_Nd0BxS6kmRXd1BEFP(JT-m21E~koC1Z z#-hprM{k?;L5Ef}C{b)-eBLQvcGb?Ni2SrV6H9~MqKQ0>+n`USHBtPRnW2XLH6+&^ zs)h;N?4}KRW4VTxw)88Qc5dY)THe4S4pO8)6ntJHWpGG3{fU&B$JySf+t9;1jqF~` zn(KwVv#HD5X(V8$+52FN~OTrN`Uu_tR~+8Qv!9ys{z3Tyavvn+>22>&4WR zoaCcQHX3Xj^!z4EJ98MkM&0?fc5bTeHaFEqWf@Gim&beURU2I_8!X+oUf3Qhl+T-E z1^n%HI@eRUs^z@~do7^c4Nh&nSqEwxYGM&K1Tr_*S=;NZops(JP12lssji#-EU$8m zP~I|I#~}93Samd`%-I^f4V}j)UDTxeGl$Ke91hB?EX3RA>>BaTx)`fA2aUQ|qmW-B zVZSuOeo5Z>-(Bpzi5--qjH>f<6Q3%IOZ)aTT zPo3`Z_OPMjoch_RQfb6iIbeBIm_V5q^u*O*7vzQ-GnN|cInAPPK{wuOUS;Exyd9_w zwo`7Wj&}&zdfwsG?+(9o(xaSR*$740?%iSQDvM1c^R{f7mst5Fj{FiwehDLViIuyP z{CC>?cUm95(>cG~88z=p3i=%;GVp$EqB&71fA?jqa-ErpgrOQLn`q1f|9>dWL@ z!ex`*FT{D3O!mA}a-nh39}IB*mGiPM-KC~R%7Y`zV&%ov^QxF^%A+HLOhTM6gPbO# zgc+Vy<-x4GvM;Y+dih;BmzOWSSmd=Fg^9@jMs`-D=BzXtJIP%Tt34Y5oxk3z)L9C7 z^{S~WWV(%?jh?t^I7nQw|4v+QFiKG2>+PJwopSH24?rIwPY*d*x=R&uBI=k|6 zCezbP)qSq7wA}2%(~Bg#SKB4uUz}yL>HKoCWMg$xb#>)g>tNTz;Y_|5IU5n~(CYM3 zE_(^?AibrWwWYeOg3Ih!*)%^^+l15BEj?Y)IohGeT8Gy8t0I;EU1#Qdl6ZO5$oimc zz=I>Zm7vGaNIiB&@=<)>{{1jr4QB+3KG~B8W2ceoHsZ8>HFZT1T3{{@2u@cksj)Xq z&t9fm-`CX5sN_C6vM?T7^~tUmqnku)To?iD>z(<9Q$fjvsj*xu+NnRk$>Kv)7xuGs<*GLl)IH8HqtC= zIy{F0?VeTI;nwJqF_jFOMNIL!&Ho#|5vf|D7IC(ktKF4#B36Z3>dFw|7>;JyKgmO< zB3g}e6DwO`tV%yusa~{52df+ErMsDPV^ueDp@!=h^0Z{O-qYEz-1CX8QZA$XziXzd zWz%8%{A!9gn{G4tWnl4%*d-!$$ytf1>#BoRDkw7r|J4S?(HU=yM-EwYX@7fLL|;0b z+$F}jg_dTyu9^gszlaZf_(xtHk{gMl>Y9d{Sy4IeOM4+TuZAwZU0OLSXS`mAOnd?N ztk=*u}dehTgTs^hAzP`Fr zm%%x5adaO3Cn(y*cF)Go+h$^9ijaJ@T*60~#JG)@ zkT}kax*goGo4&aE>gw7%BKmS*arIOlh8bp2by-7Qv99`c4O}qY$$VX8&cRtZWAk*I zO56-A6`ajy5rS98Omo=qjj?j`oUp!nF@ArwKRRZy9}t^3WYtDwjKr(!qBy(^816zT zP0oQaU03a^3rRaWms65e%GPoXRc9?}vdSGMs|M!zbGCEW$_TCzPfgbA0zk8w??Owf0J#T*u~sww}M_+b~#?S zpt^nz7eFkuCZGAD%!H?MoquaFNBFu54o=CkZmfvaN4vz!j5MW+`y74YP^Z^vJ>Sx> zx9i%l$A~mkl~qhL#~uo6sEzwfWi`2cPR?32%%Pmy%cR9*9LSlfW?t2;RjdffIIY9V zNn1o~Yp-vJndg)?v#j~v1mz^yEff1*alE=<1&?=w3+cmP zZIsOfS6;z|OM+a<1RWO{Wf{*$M(HAbKk*8qPU3sCrMAIs8}=C-anV*6WY14M%7bjZ z%A!GCx$Mg(GG<(xrG2EV8v9<$WsNifafSFm6%!|Gp3U>W5sqnu@w zvy5_<6+q0}%SxddGIakJB*LSBQiJa|q~0Q4__ff3g#Xd-!%F#rI!1V_;fJ?#nt_z; zYsf$RhlcbusPH=t>1#dVUo)hyorM3jAw@m4{O{l)eO*KPh+c;H$u6Bf;#_!0f5I*4 zUo)gX-xmHNL;6#0;Y$sv?^}5~afEc_7RxikjDXa$md7q(`GL7(H%lC%w zOL&CkY44Go?DS{jlJ{b0Cj1PWJ_{aF?6jnQBWFW%2+Q0o{0)YbTu}*M0)3ruqva#; za%Z~H^5h#ypQs;OejWVZ5#De4=ipx={E^{R5F88%2B4u12|pZ?x(EuN1yKi$!e0vE zOI~~G&*J5?_RAnizu6(-<#Qa5gqP29JQ7~6t;FF4g%>{(vi7TOgsFo@Nq^pwZ9gTx zA%y>H`QxC_4#NlVUm^9B;ZxTrl`8xc%Rc}QscS5cZ>NfXPq+L-@Q{*ElhB{~up!U? zQfY4?b-hhr4-a|$o%#s;WANewBLBD{Rbu(?!M78}4|MuQcu0v)Nd70G&4lM#o_eH8 zU9PtL)9{d*W_kQLReX8AF#}H@;He zf`^p6Vj%MWXviC%!68ZsDcVWWgCh(n<~hxeg@@D=mLCTXsUKRN`8WuvO@<$Q9>Wt- zFI#>fJfx_%lsA~UTu9L_nn&MYNZn}pJa|ZTSiTMZ0m3q-L|*1^nJ>O?`RCywML+2D zz3{&!e8BSi;34&U!%J0#^na8$B*l<7{|rfmhxE^CNO~_r>NVno?`=p)orUjXNJ$?E zpAPjU{128t2OiQt%^~SuFyyUALue}@^`6cDMR-X6WQXMciXm@381hwk$XmaLTnG>8 zc}4PHWJqncOW`5)pO(*shxDh3QvPH^dT|zh zx*?Ts^M~OfC1Xg^OQ8s1#+l~J;UV>;<)iSB`jO@DhKJN1%ddck6n?MeTi_w}E6d*l z52-gSe=j_w{@(Hr!b9p+%RdYcsa=-e3=io~F2!E*3F$c*erV8;`isdwbTB-mKDIpV zHxyFuTAsEXD((4^;fG^~kUD7i5v43okiR~c!9(h42z|14>-GB?%P)e5y!HJU{U)Tu z$H{-}pA4zrSROw=CcZ8{Px^`X45?Df{}KLAgk?^X^uy4<5&jp;{~7)$Ve;v8>Ul!y zDshtk81xxoPlKi{uYG~Lb6^83Lk-%Srq;$OHH8gQtxL}R++SED)hISvgUaF zPvC_vfh7MqV6_W~}99u6{|4^V2)vg{D9v|FR{I{{_5|$G<{Y$m7Lt zggpLL!a^SZ8evF&9Y>`=zqB+B3_!arNxJZ_Tk?4E6(NroKNs?N85cq`Adwfp7xH+S zcZ59t*Mx;UUgjzBmFpmp7e5l3ZF%t=Fs*uOaye;JM?+_N64~hIiOA*Vz3krF>__2`3|0`i3k3U3M$m8E5EadTj zBn(BOp!A=N6`?XH05M)PNxJawTk`mSgBS96#*-5A_#=dcVvxvxV9DeE9bU-e|AVlQ z$IHATb8{6W@-i<8Ra;)hsgTEiOjyX{W!wsR{BgoUV<0K-ge5Qi6L_HpNYekylE?oQ zUdZE55*G6KPYDYxfkeL3lH~(AL_=Qv0#o22RS1zkFvrmB>G1SNV6Gu~>rL~e@Q}B^ z4B&@Cp1%Z^!b9HvH~1x`guL}NH~=0RJ(@Vm4-Pb>O5xETyugsReg_A^L*D)&cp*IG z^F!bvZ+^1-smm_AjJQr)#|P8BkaylYJ`5i6_BY2zz(d~o?|3%+M0ik9|KnE~(m(wrd<43av?(_I zAUx#r@4`bq|1a>6&odT}Lq5+~JTBwWEAKsc$mbc0$02V%Jp0Rjb#^Vf|&Uid7W76Xpi^pX=di;ODLq5-VJTBw$I!MZA zEDCw^<#EQMkk5Y%5BWS}@wkk~*^tOH{)BuUUpOxQFwdsr3&$a!XY3u9@#m#8_KwT= z^LTvaxcJL_NXo}Iggo9GzKa$Shd=(6JVJ|NmX|naQQY$Q@LyB)%lq1&|C$D$reEYY zd@p!N-+_v3Z$ln`R{I6n9|R%nQ0QVGVsHa^3D^!^3T^`Nqh(vb(co6_ zGEn+%47eT426uq$5ti))$ATT;IB*x33+@K;Q=WEjtKK z0uOUlIGOBqCi0>->W`uIXn>M;!*KzY5v zfu#RE7z95CsgKOBiCpsi5~Mz|7AL~Qr-LP6KTztk1EfBwPlE~MS>qBd#Fv3{$~>;mi4p@oAJd9TfX%-{q7g zdw}KG9~b}*1HTH6BAxmy&n5lezyOd`~-3jfG5$zTzhvK_(w1U90XFQzz{G9LU(7=9{&JNrkql+09*_fDSrMDEMa*5 z8e9NA3zmc52jk#Iu%2>8fKA{qum$-Fu#Iv>ZXJkCcWEK0TLRO;V)9pk<>Y%4r0nA# zf%V8g1}2D~4Pt=oQ(9Wl$2`!on)u&>Yst@Ev;|!O(X)m4eW29)D7X{;A3``WhM42DSs{UPl4;eb`bmJnZQcI$7{e%3= zKrjoO3{ubGqriNS@I8efdG0~y@L^y%NLlw_>+lq?35q^}#_I?Az=HWMi*f_ix#D?LFi+i)dMc`zx z6byq!AbEzzLE?rpPuxp*cm>!9V*9-UQrIkaoUzJ4k!o+W|6u?%e}2 z&hFh$dy5^1K+$)EcK#H^-T?NtDv)}#X0Ua{)>bI>Nid6kr~|QAVOwj6_)Q>o2e7|2 zAH=TKFi88gQis%aAUf0^zzXE?uhts$2{yskgQAf3ZKWP^=hV8Ec*aL7^$Aet)-A;U z9^6Jee&4zi{s6ca{v=3P?yg#?hn&G$r5=o9rgRlR*Q#`odat4$0sLrH5W6;mS>SKL zZ1DTwWbiv+A^8~3s}@jR14x|$6(F|A^PyGPeEfE>5uW~El~C%UyTKOnk+y0zJmFQ; z{UXv6Nc=~VEF7O?2H}UkxD(V*yJ=8BC`3@7`2~xj{ z{!^)MrNJ)&GmxV{zcqk-!Vd(OfFTcsfMt#Xj@@vRE*U6A$&q=NPE{{l9F+rd`!1i&`G@0M7w;ff?Xl@Lcc!{y^O7!{DpnQR1_ex=(>Q zAbHcqf&;;E;4lyy?;}rI9yl3f-n%ahjt7gu31BH00^{IBuo1i*Yyl^MZ6LDuZ2+$T zw}4lI+rg{A4lp0w15N?=gHypn;56_PFLzX)H&^HZ~%A>7zDBDJEOoEAhx7k z3nG&?6D$G?!3E$fumZdetOsX<32+U#8k_^J1DQ9!vk9b*-`NJv19yTqfV)A){de|( zCE!7DK6nIV9De5nc(YR9O#{*S-As`2^xZ+=7r-oVA(#u+g48_?TfU2p$6f;|GmUZg z-Ey!DtO1#KzuN>hfUV^FCAb#EmhZL`|2DXlaYa9WcLykXI>7!Qd3t{n+zV!a2f$MB zFc<-kg4olhK=iedr#HIW27*y=7`O<`1{Z^q!3r=8#=v5ban?qey%|q!agcG;)(8#( zTfm_p3VKsk+XiqrxCI;mZU;w#*xNe`+yh<=?guXc4}pxMwhzHk;7M?_Qftz|%fJEP z7%&K8;~Mhx#-G=OK>T@40f;}ZDFSoB1t9*srUJx|*VKdf@tOpP%$n68e!ONKh##-n z1m=U=K>TyfP7wcGvm3-e*X#q)vF0F%f37(K;-70yfMKQXPXlLwnc%hHAP~R2KMO1b zv8gwHc|SUO!|0L0(#KMej9JPQ7XzwWERx4;bi=2>u{QoUXRhk>tv*&t;+Fd2Lk z41*$94E`1@1^0n*P|9fp{}F5fe+RaK`@sz${`$Zc@Sni#;P1f>5ZfNu1HJ>2x7Q!Q zL*PGyAA$$Lli<7jRq}N3U%&z2zk)%KylY2+?|~ukk6;1#C$I>l&TAKd?}HWKzk&7K zed1?p6Ci%Jb~Q-JeUUjS=BbU)Yxz6iF0KL^)> z9bh~AHA&yfKDrl(&cR;-cY$99_tLMUzyl!T=fT4uB%DI|4-F*Z zAUF(p>iH0|so41t_NHzHC$pXhz%cn3#}5^;uMk|owjv0|%`^9h>dmwEhZ4x$OZ;l& zu2Qx5&j_9O8ZE;>u8@}fg5P&hrvxC{j+{M zdS3%Oa4WHA59M7B?!(TF-~o7SSbv1_UICAS%m^EQyh>l0Z&bPo8@{#t)YV-!dHgGVA-N*39M=0YM^V=iasQ(who#1)k zF64-NWDoVEE{{;=h((~-y#+jk-0#2-!Tm}-N_6TFi5-L&yQw-EnqhB!@v;v z@w-R!$tHXeJY_vvie29aYiPH(!A8m(3L-1dQ661OzL&su+T~SnEBv29Y?J5Rk9L6g z_oKVWe?ExafvVd5DNj~<05ya7_e+tswRv7d{A&4I8j~2x%Mg z;YWaB=Q4joX1NBJ#0Z2c{{qF`84~c-A@Jr^e z4cn;C5pXB@egf_W{}!Yk>O*ipNWX13fS$?VA^43TX~zXmn)Jsq;K}#cK*~=AhY?S| zJ(f-X<%7A*_e4EL89ZB4j}gZ+HT75l7yzkX@QYv}{nieafLp}6{95=1a1-UEfZM76{ooGd(D_&g>EwNkdL0*jKYTrS7%Tu!fKMv*cpCW^gVZDS zM_?x9{0%q|WV}8e1TO@$K>Xuz$_h~5$0u;73cInhJw$%WYZtq}2^PZB-|a>4w}K1E|5LD(_z7SIh)jDU>2a_X zp7v~CO+MPWeJwow(2m`K$>1h1AH;4Y{7&qr4cd2MH!|(mA0$uve(dQ050XxQv>zh> zR`5gkEbt`dG&3Zqhr9!~F%y0&I1oA7cVm$FHQ*@ZDnaQF>bVhHM@YVW%E9k9hS4_` zEJBX{*jPfo=Rs_ecaJt!ke_zgSPxSFjS1qbz&7+1fKtC1;0EH`!7cEVxp5nKHMoQL ziQsPZtOEBk9)v##zXbfy$UOlJ>B|x{04xQAU<-)-LF)MgcB_v-bjmx!PZYur1&hFH zZ~^!iuoS(sLF`sX!5Z)w*hKtXuob`kJ-C|q{{+SUjUe_1t_L@Pv%u}>c^%vdvR*u~ z3;YLg5BPI%KS=nAgOtO3{RH(04g=9S_-0-!#4|3Q#BNms zQntKz`(y{01!C(7{QF7lK5+y*ggy6x$Of0Pv|{gxKZ66we=&%iC(yGAJ5L-3^U3!e zun1fRmJ?6AZfeA?6j1CM4q}%)XWWEc@-E?~P1yG*5W9{Y26vHvGq{g(D0|Z(@M#b` zQeOknnfexZ66{cFa~kC^{x_$C&w-h=6Z696L6q|aa1?kqm4yQJ4l=Ng9E|C;Mc&T;00{Suuq=x zKZRZLT=uCTSPNoTU>-;v<(=ZELbTU=U_SBl!9wsx5Icw517hcpd%=3-{}ybq*k-XE zcSpxl+o;#eUz->0`CFZ>Sp+d=9f&!wN<%RF;AxF0?U9)d3gvHuw3 z^=a%^PwFk1e)oGz2IZdzKahOr*&_DWgIVaO%q`R-uo%n+qhJUu1M`uiZd;1ThYed6 zfNz53$bSaLLE2*rWep~6OB3ecUt3mVx5RHC{UvZKcKrd|3I8Jy`%?~p2PrQVJPfvg z*gY8k+H%t1GwBwwdpNSsVDE73eFi&+{}jZ|;XefPDgQ5EnDWPh#n>?%ECKHZE3il6 zu~SL@1m%+F8SIqz1fN+4{uj7`dRKy*;QtC@x5AcZc7UIN=niZH_kfI-XZC^2_s<+6 z9e;V|2>QMPo}k?>VQRvDs-vFGBwrmk2zwLYFzWj%I12m~mGz7yOJZUzq_PkTOl82(Q1L-Gk81($&*L2UVc8tK_!CiPB$=$7~QzMlnO1BTH1 zV=zp}S^3M{V6B?|FBrbv6&!n96)TgdXs9PQq| zpAwt(zhV3@%qZa|TZVS%Oq~Kl6_Q!0lV-$zCo7E9ObXF8h!Y4xx{#XzDcaXZCu>G3 zuktM;VO40EgfOL0rUc|)BP0c^6{Zc+#)^$n9bpDQ`k!Zswy~5bqxe)c586}_k$t$< zsg0IWgOJo-|C7?BAn7Sp0R<)C86eF6{j8$X)RRC05(73tYBi+m=NTZ%6OjJ5mH#E{ z4&in~g%Xgg(iho~r0RcOck60}iIP_mlpO@#C%~kK&l+dlz{w`K9-cj!bn{PNkIM`gh&Yt6Xq!7$pj>eq?Cez zY&S(TON!_T#N8CDC$L{qwzw&KVUYPh?7e?jT<3Kzx(5arNh1kKBMC{^#`f68_QVD} zl8{7VB#mqwPi$t=jGkXIwvbgupdwDdxdwuV_*0VbKZMuw>)GayW(lj$QfDa<7&b5)sq^kwDEIGH6fwZMGo zBi&DaHJOAkl17G!lSv8F?_^{U(MSG*Fjt+-oHFimVWiV^GK)kSWx0*YRU8oBb}x*D3IDE+PE;%X@-&7g}Eur zl#{ukOkoAEP&!Tf6iV%AD3nqPYn@D#%!n{OPG*RVlu|h6WM-5pl2Qui9ZZpQh<=J9 zz#_ks36r@fjC7jLt*D>Oq%hKHhPkSY2NA8JYfff~ObyT@`m~QnrV)CNl;V+2GfX#` zF=6_g%qW=!VXiuvIb}BZg}LcqHk6WS25zWuG7V&;lnpZA=?pdul95t2NT(TQTA7VL zVWiVEv(ZbY9=Ng0$<&b<5T?<|NO5j7%7|{f#V>PWiePivG~h_a zAg&-9Tp|358iptO01WlThDgMauFN@Ir7))O0%MN2axZ496lnTeE&xg&@-jctyF`)E zvHJ0n!pzS&ehV`z)+7ztwq|H7i7`(@w#@-Q-LpCGNC5e9`S44a8Zo5z48uBHjl$G9 z8Rq8d5vJYAbgSXIBut-^xkyGzc8xfhF*4VLnQ$`GYUI@d^PFRxS4~E8%L}W4-!Pb4 zUXK{g-13-Pp7fLF>?e=?mJoEGkn_12iX;G*b{H(<4k6zcLKRtw5p{^gEd(4D?elBg_PTmE$Ep1?;EL z2g95(B#8VJ_Tm?O3WvlPz^?>enV;G-SIze0H!@A>jS|^#y;UE6-f|_57JUOFvA?+3 z>yqXGUS-S6X76lAbkl|9`KD{bQR&R`ZaaEj(6gmpNTaV`UjB*9PJ?@SdGP_me$(}C z-f!j8r+7;}yo}uFdzY82fFQiY&mS$EhKJn${0?DaYeEwpU zPiCCb9%fu!qsz;MSYEE$)pca@D$7)Yd2?M`UM>owk9bafNk)&H@;uOAgg&xX|BZq* zRhXReYTzTahu8XK8>_q+^s=a+^AY;d6bRK3M;r8|(DJ`p2#E+aEjB4DGWI(?Gxkz?z6`oZyUgB)wt z;Zx{?&&_rE)GaS>^sLh-0iTj}`r!D#v3#9AbMUENpHEQn+)9jquX8eH6xt=$m{!Qy#&l@oRo7TCWH>BXR&h@-u z9zL?3*RcjRmcplDoj&#OX+~6i&rSIBXS<%rTX}6 zHSUUQ7HC;MHaEkkd7VCk@QJO{XA(X=>-1TIPv81{wp769 z;yQhz@R9S+I>v3wCHRc4(`O1ksrC76wcvAgojyVMOs&(W9X{9A=`#eMxpn$X!{^5O ze2TG)ZeD_q?5ltOBiYFv`(0-LwpVrlw*jk{m(5@OSJoaAxTo5Gk78ddM*UmXS${F= z-?Gm7i&6g;so&Ic&qvpS+_s_Yt)cae**4U_wH`iM{>IF8EZ7!`>AXNMO) zSljFAXGbl3YT>hvaoZ7xPk5a^qwr~1r_U^WqU-QM?Y?68$hkg|8SBikfcv$5#|-<9 zPwJn7KFe_+*M8tb{o7>US&t9u-!`*OAJo5H#%vZl_>YfDL77^z=7#!rqW&EauC1Td z+jsxW`F$tq-+{SwRjeH^$90Z6ues-$xtCX(xi=?ztbd=J*KS9TIoXN* ze`gu=v$vnqF6{q1C*iYZ-m}z=oOa>(x660?IqhnPz8Csy>&OYm|J{E0Tw3eHtn7Q3 zLF9z<|Ly_Ig?p`D<|5a1-EJ(8608$f02}``=e4Rmhv;iJ>feJk?8^GL#EQO3w%o|m zn?;zL-8la3ZA48=*>Yr6Wsd9b8u(!T_s!wH{zNt(?dvx;{Km%gn4mKedbf1rxAZx; zynL^;^knm=m*3GR>MJRMkF3$@Y(COw4!?T%U5DRzF2Bq@PP@ly^w+<$l|Q^6~@M;FDVGL%qEZVm$VgFE5v4-dz5*`c-So zu1oxymzN*JIJ)ZB>33;)`Jra`En-d1{Lk+Kco5p{2EBk{Q4BJyMLrUhMye7jYdp zCh^T`Tvbn&bs>2TFE2kGL-i}3Kk4%r$1(i6JDr#Gh2!7T!??HRL0>;MJKCzgGWFPh z8^doO&i~KH;g{oB?l^vU9V3C{{{J5tfwQuI{0JDra~r`LBF5I(*zXMbiN!>Z;+aL_ z0ulSC=+8_O$B8N8C1M{jL5vcSkMU=}XUb@oD1QDX@rLI8`3c(W=kueqhlvA3_V@X2 z+U>*$F-&CLpJ)GgTdK*YoBejr(Viu;|8Ddz@E4XCv(jVmYx` z@igO~UZg!sWc& z8=%d8W8Jh_XDmXymWX;~{$hUGULyN{9sLXc`hvEqGdcMe04w zIzD1ok+fb%eqz7SCpO|;q`sfnOJu&UH!}|M{=@Nf9K>zF`|Sg18*x#O@GlH7ZoT-S zJ*>J~5F@6ov&-i7l;+3rO^HJ|nd~J?s>c4EgHi_{Gzh^DuebH?duqTjD($4R- zE6NX*3ZJxIODX?CLi2iUjPXW^W?T>l^;qqWxc%@Oam0nc@bZ~R6SqhC7vhWyl=b#n zj2IC_T#U;P2Gen1*Wsx zl(v&r$CC05A&uK{Q~46)C-c*>sPQ@$h%*|uV+vm#=T67DY;{bcPG{V4<(r_Fap<_B z{0r&0DaK0@hZuJdUkMg;#Fg>An6?q8PkA}joBVp|-%kH}T#ha}^mS^#K0!UkQO3U` zNW?lbb_o%2#cszq7@Q?e6R*mCciC!>;v*Ep>3(20!@iWZlU92~?XMv(slOe0iT-Qd znn!y`;=!*L^*Q~j)qcVFArI!+&OFA8?xO6T~s%2$At$Vf(DQjFfv<8_q%L@_RZn9zPAB}pra z`4IaR#EX>R?Joo3ciD>eqdn%(^{Or7WpoL~XC6_`Pc+2#QpQ2dKdg4d@v8kw8RM8d zFI%lkXs@t!t&3{E0{=(}_yv5FFXiB`tKEkDC7;$A?XPtj?L00@eXWyfx1lZ*=PK+z zN1T+}Z865-IJIJ&zR%;AiGzN`Zfm5@tSjV&xZiJd#OqVL4dY<)>S11SwBx)WKPDdf z6T2-)T|0G%|NRn&F06K&@k5=6E9c+VGU`$L_q`5%vD(o^jeBZdb*HZ5me!K3J9SO% z=p1zzH;H=+<012ZY7BpVI@ZZ4jEmUKQR;`O@1wpKe8>?Wb&K5`puV2EI`qqRF5_^j zR_!SIm+?ASENP&MTu19p**s=tb&+)S-Zc*)4)FJ(T4tX0L^8JH3hi+W$R`5nQNZkP1 zuQ_ymYPVwkjINQo2-+tdy0F@G*uEoO(a_afiNCZ8;tpy-)R@#W+a5pOrdN zw*IpVYPSxl{<9O*Ngcdykp1qnDYaYssY5*`ULV?dzBamq+O0j*#o2!Y^%3y>j{c=S z*sa~vhp1QIl-Nga;$+=x2FmgA_2hrEpr`Tl`pJvSnb*sVV5fJWy>* z>Jj@C@|3z>o`vl=&b>UP_NfTtAaBX%<#Dt(*!{hnQu|abbxB=kFJGh{d48|nq3=`s zR5kUD)S;j6g&exD+NT24p>ETEDcZ4KnT^#L>df)FL~9L^QwvOR(->D)i+!NKX2F9Fs*hAQ1lI0M-sPT810UA*lu4Xc<9_;@+AV$5jZ=rbzT5B6p72E1dPzc{6KOBwYO)Q?g>0^V`Fd~rza79aJ4)b~&y2k%(-FUHhvv8azykGduQ z7enAZj{IxXZoWZ%kopqp(QoReLy!3vyZJixZq>bjaY#AV&kGA`%XOBF;|p`tVO&xJ zcDxrR)ow-|Mt4wb8PW2cEnNNA7_njMdf6roW#O^{|@q6}$ z`aO%f#sAr9^?P;_x@!)-}sf%5Bzs{JU9JGy|BAbzv<6X{WFWi>+1K+HRzIdf6qw0 zu)E+de$Px$kGiG5XGZ8Z1l=WvpVSMx^9KF;sYl($ubqC)(Dgg~q+Zya$j9^-roNUK zpr0Q)?0@nj^*tl?!tR`*UorK_Tl)JH@{oD|)I4-N--zF*q+Zyalj`>=_!~WJgDLtA zL)Vz@5Ajg1;V%+Vmx*!&B-P#(aIJ#*QCG|Hcm*gM-weo)tRISGb$;W6F0zZ{njasXH7( zdxaxD>N0VI#4_qo&k7yt65Z2F8vp5=%6Il_{HIZu#D97g?d9qCN$Y9UC3a^ob(4%U zPDEYCZy35#ho963yE9I|0qPOQytCeccOpk?~_;QmqfecxcfnfT>IA9bk5se1}_iSDTz8vm&U<>mRH#D5BPN!?FPO3oTPcAC|#5frp>XY$#5)+r0`(exTrg=p zA@zbkeNE#$F+#s#v^&NUo+Yp>^z^4dSRa)qb|%iwZs7Z z{Lu055jj6SA@#yOeTja>)T3_6xQn>(Vx@{`*fUsjr6N0hKMyp)_bB1ewpLjW$Q#KzG`pD z5f}9ee>y60lhz5Z@~0#0$D{E=OT>B2FLWKc1v^e?TJ6)wL+T1mQGb}rhbF}y;xj29%LUKz&_>XYm5PzmyxcKAzO zu)DyE|M3OYA4eVHcYKCu^1W;wABR3_`yU@uyAx>qlhh9r2L<8Rk2)qDetl~9_~_S5 zeVmB8P5)6M>NYm&HSua!)0gnxo+ooY(njx zfaZ71)C1iB`oZ<3{2awYjAIG4yV3tqb!DubswMD0XXJwY5pB7X67W$Nkz`yi(MS;s0fcJ9Hyz zKZX2_?hv>r#EVt*dG$C1P19M8uasIRg6{X_zK^doh4E#j+x6PK+|Tv^F~0`=NFG-2)k z6LlKz6ZE(6^YNaf^@&o|%loZ9-gDXdIPyu4tMDIBI(cXq@8cnj`|%258PTU$vp}38 zB2QV5HABQ^VvrahmJq#ym#rGie|rBrGOFKfBXN$PeuM1ii0LP39g*?H{(5d48t9KC zs0$OB_mOIieaoWsz!fe zpGTfmA@BpM_&z6(uO&ynCQcOXJg=EJ4QijiCUKyvp$_Bmd&Q3a0&1T}y+()eH1WJ> z_c(Nx+UF-!cW_R12d|^uvULY%)RzAnQ{o-GLR|{qp?A}v8&&%}+Kmo%O1}sD(a!Uq z)Nv5wF7|oojSk~)bd6}|@z&@t4`QDmqAo}s=3#8c(XU_a^B1Y}Q0GSbl&w2(Q|QKMb6U4ZWMeKONKDEym zQ-}PGt{d%Phpt`i^B(FNsEeRI@Ea=c7 zf3e@bK^^AJJ{g#vkMJ;k={0kL?MxUr)Cut*UPIe;a;MUlqnd{N9GYvD;Pu z_7MB^NgQmOJn{A73u;$hBVwGT|H`ZI8`XX)`;t~A;){JA<4}oQDjTT_p*^m;ihk&- z)jp576_~rqVvSpY@sPL`v*2rOeZ`d8=dY-~0{zN$V?{IlFkg~yMGgIf(DS(bDC(_1 zK4M=$oJWyMMJe@O>OJ7Oo<#pB@(}w1>JbETUPeEzaUVs# zzk5yVFuGB-FAP$5k-9$n{AqN(YJXv#x;S;1$KM@x#EYtZp^>^0&GV5PMCSd-G;P!) z@UagRqG?r`6NDc#b|HTdX3Jb_LniPqI(!|MfdOxwAb6ZhcRwqe;N50 zoyixvDYWx=D)Ao1c!>RF)N6Ect?S`-Vly$!enOV@JG1Nu*DDVrZ?V5T1ApZ9kjV$g z@p%aGCBKKRLYGv(hj3l}5b_fHD`n6Q;1#8=9_2-+UJ5MS~v zN8BWjHxJZ77f}11W_vjwczxdu^ygFi7wYky>^Jb5RsDVA#4#fBkvR7;kNYmt z?h(9f-PescUajN4>ZJL9a>f3I8TeG=<)_}Q=)Xxsy%N_yN4!SF{7YQ_6|C=RjqC4C zT7Kjq_Al1Mrx!2Q?GMwhmdNq;2WXcOIqpcux_n9F-aDDJ?nNGA|Kc?M?}SObQhMIH zcTD~6y+lNxlJC7eM2x4gy^8nD6Q_uy!~tSEF-)ZYJs!31zD~SKWWRT_zq?Vl^mjMw zySrHJvPB~D7rqSn8>C-ZOzSCYWP2IW$9B%kU6a~=7v^8i+jk{tcN3#*kI=3lB98QT z=MCZvaf-*k7%;tUE$@ znel^e5bZp^8Xfu*`>W{3=z1A9#<<8MeVjG=X0^X6G3CW^yrY7Ctp5(?S-Pa{r8kK4 z#OuTA#o$ zd+EQI{(I@ahyHu$zlZ*N=)Z^ld+5K1{v{lb68e>lXk8^7_mT$ML1GE9m}n{PUL-CM z=ZMq9q^?i-Y`To&ZpPo;O}mbKfOZ*?^S2xQ$hzM(rR}>Wh-1WIBIC>F?4_SwHN*u`112IhW5j~2VS?}fv z+5<$6`)2mPnf-6(IBaIT%{A0l5KD>d$IJY@%+EWiyqEoWIX>PxwlkiWL86~nLS+A* zd9^*0#Bn0)kne|;x;(7I6Qx~CELSXABHkdK1zh<8J!3G~Yr~ z|7CnX1^9MbUpTJz2zb#KUZEcK$hZ`myn)TM>xm&E@-#Z+Cs=^|WIPIH5I3s*6bvS< zf+@8>Kwbrdc#Tn)M0>MCH>&mr&>LNY9#;z@j2|HSi9Vu7(Y-{RC(aVlujJ>RBwo_E zZscOxdx+gc_9x#vZg|$|4$?+{a=g#Kp|*V6x#;9e(G89hM~N6))6RJL6|~EVoTt2- zVqdoMkazmIV;-*W^AKO`o+0oUo4hO9e;(uJ^=q6w&Qo3k;~?)$oB-lftNkY0^8%MG z*MiNvt|!g^TO#^55zloUJo-!fyDoyiME`5xFCuBP4ld&lGt0GC{w{K%&6||}&&Ak# zuZxX!x(Is?Jbu22zlVwz)RzBi@r!lfXJGU1r7xC)pHlmqSHPEpPr>Hjk3!B2vZz@8>Q3O=m%Fy`m2QSd?7 zQ{?->2h<)${crVy_rabd-wxiZ_HZ-!cI%h;zzDm9v{FK_m z81J{r!KYx4llOp6sy&rKCJe89`K{!gRqn2`@sj)eh>TMoBiN@ut&+agZHZaUM=``91j*@kC3m!@nAvi z_Zq?1nd60P?=bmtbG$J2dp+RG!Ka`fBJTm8RQtU_@E-7kurDd!GY@`1?f1s;l{)j_ zYpB=}MALD(_! z{on&?e`^kWKX@N(95;-AJ9w|!@1x<3_RCiOBJ3#nx}=rAp!WNv;OoH8z-}gA4t`4Q z_p8B|gHOS3B<}&ARQvr1cn|nN*bT~mVIKT|+V6MczkZtsABP!~1*k$C)!B43@aua+x_!R6?@*eQ`C-w(E@E-7kuuGJW&x0IL z`-2M0iqC_O!}gJ%1RqoTgE06>@DbR>OAuLC~=+ag~MeoE~Ru7NKHpR!zgmdJa+qYJS= zSOo6@KM4D#@@MD452*d^VtmKXJoq^5Me>v2V`_gp0DcmD1ojQ`qu|48f4dI+DEJ`k z1@isi18RRe3ceq_5B5CycJN-czugNSV+h`I)dG=^K`*YA#CGGKAe#RT)@n8FgV-;m z{UGWyxImmEV%?bb8R8Uif{1Z7e2R#aj6FgeA`TJ?0AdVAL#3XTqI7A#I4iNi@31XZWBSwjh#0W7=3=wOHL1KXDCzcX@L@&{; zSh+-8BrXu=h_l2Q;uLX$I8ICvlf)6?5OI(=Kry<(BLK%67a5@(20#0la!F-1%gM~FkjLE-?hkC-6Fi7{f7*hq{J z!^9A=h8QFUh<;)z(MR+W-HP)545|OoMdAW+jyOx4Ax;q|h~vZ*F-aUD4iN{51H?XJ zf*2>ph*4rAF+vOzL&O?lkQgBPiKRpz(MxnIKC(nyBrXu=h_l2Q;uLX$I8ICvlf)6? z5OI(=K8sObiig zh(Th2=qHvEeMB$Ot@z*)agn${oFmQ>XNXh83F0_0MNAS$h(p9d;sCLam>|Z9F=CY1 zNQ@A}#1OHD7$gRWeqt%nNAwciisehhMdAW+jyOx4Ax;q|h~vZ*F-aUD4iN{51H?XJ zf*2>ph*4rAF+vOzL&O?lkQgBPiKRpz(MxnIKCnbwBrXu=h_l2Q;uLX$I8ICvlf)6? z5OI(=K#5eJC_#6Dtz7$?SvQDP%8LJSi_#2R9d7$EwIr9>amOLQyVw?tedE)eI4 zv&0$V6mfz$PD~M##1Y~UagaDb>?0LBg7%%AaQ`$M@$go#27J3Y$QgAVPc3_LktoFL_e{V z=p%ZGZpC|-h>OGp;v8|7I76HwP7ue5DPod1LL4Fv5(kKV!~`);j1i;6Mq-2*CWeSL z#2_(1^b<>oKBAZCR=j74xJXr-&28 zabk*?B#sb=h=ardVjnRgXNXh83F0_0MNAS$h(p9d;sCLam>|Z9F=CY1NQ@A} z#1OHD7$gRWeqt%nNAwciiu;y`i^K)u9C4O7L!2T`5XXrrVv;yQ93l=92Z(*d1TjvG z5u?OLVuTnbhKM!9ATdDn6HAFcqL=7a+`B|vBrXu=h_l2Q;uLX$I8ICvlf)6?5OI(= zKr-&28abk*? zB#sb=h=ardVjnR43~5QD@3(N8QT`iNelTXFXi zagn${oFmQ>XNXh83F0_0MNAS$h(p9d;sCLam>|Z9F=CY1NQ@A}#1OHD7$gRWeqt%n zNAwciio2GGi^K)u9C4O7L!2T`5XXrrVv;yQ93l=92Z(*d1TjvG5u?OLVuTnbhKM!9 zprSQSyh2P7$B4|&8l}xVtzp_j#7o3M;zc6!xB6-K5);H8Vw~7bWL*~Cqayp8#rmvf z+Kt2pVuXnIsu(@%w(4lJehaY-Uqh@W28k8K0I{6tCzcUQi9TX6(M$9Y-9+>!?=!~x zbrccL*d>A=TKnK1)Aw4ZI^L(i58*q8MyL6#>AxgmS%+t} z|6NPq>n+!=n+|`hufzJjHrK8R@Fn1{+WhW$%Q`ej|BD~u|EUB&;NVB`9)%$JdhjFQ z!wx=A!Ohe6{7;dELQp!&~S6RpamcK6tG6N4S1=j=^?A zpS1P6rY-AZ`aV0?&YlnD^H{E(aR)z)x30w)uMYeW_>hCg`h1x6?!@}sh4s0!*uf*; zhjjd0KIFR#`T89B?!tO}i1X#cdfbKe=o_>BcVd5fQ0Ld>!~V1r`;$-gX1;b}JRfBK zK8)v1jHk~ro;!Q+R{M6%-&Y1c4!+b8KZMT;S1Z3`0er3H+A;6oefX^JIQen##o({l zyzd_{-hV;0W{}S*q@S3mbe;f9fyMoGZ#s0Dl`^#3x{<01G^PP+2u|IFa{=7A5$1le5d-1o) z@X1AUBk0`@fYJq|tg?>htJv40n1|K1vM@G*P_cY(YQd^`AJ2akO3V7^fpHjz>B^t}Qqo6(j#r&DXUB`4=PqEoz(kw<6!tnD(~?`EEtNTO9drMZTp0^2m29 z^4;RdcPsMUw?H2GZbiOZ9Qkgo2Cx0OHeUxHv|O8K?RvJl!L$F(N$?i;=?v^LCxzv$qvfY3{J<%QFXF$J^BJNr4ZM zZv;OEzQN(&3*I7M4n6_i@8FRi&tI-W`WGTU5ArK?}JKJeov6fpz`MaGZC*atyJ3RY6egwRZ zm&+9fKMemm2ao(boNpKMlh1Xz9Qozdg6H^H^WbYNmo?|`_ks^;|5ggT2mF}LyD)x5 z)8sLJE{vb$7(aXt%PPD`9`ozM{92l?nSa-pEbAvfBmW?H%y*%OHs)JCmt{HT+x02v zhYW8m{|k7`zdLPX{#~eN*)jhvtk<7>ntH5Pd=3k1fHu~v3+rRqv0g3gU-@zJ*uN~S z-{pR_<^BRbXJzG$lgIvVje&1)@O|K!?{WZqFZgl?|5@Y{pnn1Qh-Llr4EZJ4_4t2Z zZ#wjT3qQ1{z?XrabnrXyIj|eFe*o!{n3rLc!Rh=oG0S=X7o6Y7{vZ*5c6no zhB!@}B2E$~h*yc@#4E%U5ywdrFG<8YFgErlgIKo)hlrPmgT#x(0b)O~kJw905POJm zVmC2HY$ryE&BR7x12ICZCx(f2#1OHTSVOEP28k8K0I{6tCzcUQi6ulIv6$#3dWdeK zrRe%CYRYe*OFv$;Np*SmPN;?bV!YhW?r}26PuMWJ<;MI-S7w~!quOYnN z#tZwn>l=7|6|XPj^~-q0@p=ufui^FUczqqOH}U!vynYFx|Q+#gIawYKkO}tLy z^+mic;njuL|Ag27*X#cci~)`@^4$wZetAm)js*CgcWi%y+t;yuS+{?HIXv6j6(s|_r8<)8DH0&w!5(=_x^XgJ#P>74bbm!wC`toBigI%cGsUXju-bUzO>ck zu$;oY{wv!thIjrJ+vjl29?pH%(rCZy*QOmmfthVQ) zucH5;?Zxw!b?<-I_QDAMmi-NF|3nP;T}JJGchzWn^-Z)Nu-o&fFGQYqjyS_p|;-?;+pL5w0&0t=H*}P_yrv2P0-x^pz8B5{sqsd z-dl$DXS6*Z{rZ-*{bO#+s=Q0v^+&z)=^#^3tyY5QTXWmUCm`>t`cv#ukT(EcB^eK&kP|Eub^Pg&M|d$qj?`oiDS z_AN`6b=+ImX8r?)ZteKZqJD+>FzMzuo>=+wX!VP^|66A*_>o zwS6CQe&{)E-{Qr+ijQggBUo>h_1Z4?=nMZ@+qYs~?%kp71z67;Ue|WqhqmtH`t%H- z{YkcCJn#E;)q5K7w@0(K@2%KU)%4*I6V9++vC_@xc&<-;`s1mZO3;RSjE4h`nw|- z2ObBuVa!W@S=*0|V4VL&^(8gPhx^N}X5{m%wr|9C!QZHUGuFV}jFXR?-8^35ev(!8 zfa>wLkX7`C>WeYg_r9m?1sIQ zaqPcn`(eba;&FJ_BGxVUyX_X%?U3q=%8>v6q52K=SpWY;+vRUi&+lma_I~L9PwKH< z;MVp{moPpY&%80r`@FVq!1?aahju+$1^Xa_-tj{y{{BAs?`klz_{;#Qi!$lk?^R<05 z;@q=c+ufyDSAVVTxPNSw{e`yYCD6|E=Ef1Uzr}Xsx#8cc-iJB5kLL@|Rpj$e+J0{Z z^7)RPkLRYg%k#PWYBf&L4Xi6(*F74o1nIEct8@9Lpy~Zg+%)miyFYdwdipN7)8~cXr z{EL1|^>}_|-TP;%FZAO)$n#N60_*3dw(oAoIRAp`w_yF;!~M&RZBMbbZ|lZ7e1dVt zF%Cb{_R2WM?WW!DW{%swB#r}ISDUY4J^WPlcLuN?4r!dNwdnU{_KP_8bZNW059|MF zZ7=pB|1;WNfPVA8r|q5v>|Z>8$vv9wZ)&?Ac|LMZ^*c&1FH_pSFNS$p)b`C-8yh*! zI|s1d{zTh1OrV|XWGCk3ejd*^+{8NZYMgrlI6m;YRK9z38`teUi2t$oHO_YQTgdA` zJg>6u`GmH+>#+`b{P&F^KId^mIr`nC@qJ5Z*Xv~0hDPN7F7rpf5B`YxcVnH5Y5Uzn z=y#j8Z%d&4Z`qFAK6Z@l=&OYK&?Q_S-l^>+81tfCs^2<^aprNO0BdOzkDt54I6jZ5 zej_x6Gt^`5?)hhJFTg&v^XJ-L6~unQdYJ|2;p}_OqDNJAP*GFMIxsanSGnD(caf%cbqEDf~SZwDr~`+cDRB9Q&Qc z>yx~3T(^AE#IcqmmSuITJ`dxtx7&{6I?VP`=mXUIp-*isv@ov!JcIU~Xvg-?7t!w8 z3TJ#*Vl#f#Zgrb&)MYiWy&c=%-m3Q#CQ!>8ncD!?fe^N79{h91_N={q;Ex>JzvkF( zw6_oc&-V6#Vtc#V(Z2up?e>GeX>V8msl9!8pS```kwf)GyZuP1y?wC6-ahi0y?w}M zZ&&YfZ2z^reZaAO=!%bQPhb;j#k z&a|Air2WNbDl3|rT6=n0PIY{tvhpCdV=ZUTHpSoUZfol3e5LDzk)6!tp1u8g8_(69ldXEvF`t!{-7RO%w!PGL_L(lsS8IKThFB@8 zINKIK)^fHj)NuxyY>Gp#w#7fy()xVY>6Xsp?JZ}HcSYNBNP`Ggf3m)%yY0-$j<<5E zTB1?MnmJLwcHw5rBZxd!xTRNMHgN^S>9V*BtgQRM>6Y$iT28k`x?bq)Xw6wtRV4yF z-*&bm+SVDT@>4C{_A1WS`9V9=<4=WTwc7g35?zswj4{@AN31Qq%vaEr`wedf_R}5F zczbr$0b5nq*70h4JiDyg$eudg@@iYlsaV_5Gi@y=>N~Ii^6Tcm?M!x|j7lkGUfydG{j^J*@gjC%da;~4W>D?;bGV{JXz`;sM4e=^+m zg|=8$0mppB>}09EQr4Xwb7Z}o%^HgnbmH`>wrB)L@yu~|buUyPqv=v=*~W&W{uXLOsgZejI5)gN6@opd&;rx>}-H z^VE8tt$!*jTd7qXJ$d}8r|NRd(qo#>3!SZ9r@POzojuF$+M;HCW*==9{CvwyC7EzA4An>{7D?pX%(0ceKP_?&><7yWitj%^jWRy3U<_v7_yc>^fP` zCpu-%k5tAwPGuKK5h{A(Ok3`SS}AMfDEe%Pb+qJ2UKYuVZLRUHGan(8nZnga*XwOZ zqpzJin|-mHMTMQAt*tZX?&Hvy(@@qEfTX2yLS6CaTcRE3a^x@LrNSp$PM>bcI$man zRnf6nOY7^AcC6+0u2}Zn#-aXndq=$O*6K>hG<2rrjia5NUGWxK>De=_lF7iy>6vq< z+s<^f%6iIu#7c`_=zP7i>kV^a&n>PrXBHf^OXWd(!#bxO2ldj{UGuv@mjyAT~KI3N5%IZG8;xwN9v}_LR&cj01q7Ip>9&_@} zeg(DPzAVzSch)Ph1Gb81@2s+FBU^d)#`S16ttMtp+u7(!4Yl&LomF_y^ts}+omE$9 zbUba}Lc!B^R)t)Urcc`kxshcGD|JvEXWXpOSfV*Er_YPogjJ83Zqw&b#~C-PS_@69 zGiThaS}kbx88@4>vdScpKI3MSXgzYq&Bj)06`3<`R*ekYiZz{m(MsCs^IUd?tcq19 zx@;X*r6a98(PfiX${!HU6J73(SDoo{MsuF&az|Trs>?2v*|ASy*)=jht50^>l`>V1 z^H^ntZDd>Sw%nZ3veqk|YZUvGmQ^UjtU^7d@z3=Y7prEEP|>PW+DE8Yozk+ZWhk?q zsj_8TMe&+5RW@;@If|}0Q)QLO4xBktWmQz;uhf%mt>?~k#NVvLDNp{UsjocL&>ekc zRdcrKGFKO?z1Q9{ux~p!ZVA|T9ac<8ysP z=nVwsfpS+Vv-UV5C##yWtwM8csDDOR9+TV~I_Al@c-mE?BkZ4Hu+>=U@fftz%#_0ijM${az= z&7<2`IhBub<;VcY`p--_CO=(O)+Mehb;W&8_P77Zx|Xx;*>At!I;Ncd&vnb~QAy`4 zvdJ=GRYClb-4bsLwY}1EF6P)7v;XaP$P_5I$Zu~COrMla-L8jr5bo%d+se1BPnD~d z86L8ned4LGd9w0M<%$!lJVnSh0`jmTTf2SIUJ=GVZLfLiBR!;NIs1e?($=nXu-4b{ z_+q`jl2Rt}if1B@g!oJ(yUx-1t#m6oa$L$_2+gySOz$TMFKKfR863J(x+o(^(&e&iV;yPr8)WT%{ilRgaa0c*x# z&3-ROnOm@Ue4AmNd-e)9#{}UJlzUIKpHF6Du9^j$G18CI>RWS&);|5qCH&|IfVn)e z^jDk<)5DoVFZbBfdE4W)qPCBG!j~hoTwO7hY!CUed-0i*dCr$zk>yce4q=w3eL0k} z8?U)&wIBFp_tI4LnO}B=xiO9BPAeb#<(G3}7KMVU*kLnYUP z^>`~v=DA>w%vU`c%&yY%%+tZ_f;A5av&%mE8DVz6oR0~!%QQ=FrH_vFc804rx_7+{&A&In-+(9Nr>&knfw{iHkZ-+Sk0LtEhtlu@y z2(wF9JOIot;o~aDJ9s*B2(vr}%%Rk0K`ZY?;TkVTVCTcYTLxTtKF<-YGTS4;9AQ^J z6}+V={a`SMDBH8a9MZLq2XhE@6jz>va}<4xhlJUKSLJ$6m_wf9QDJuV>ZgU-Ra%~T zV3=L7=9ys*S(e9!Ih5(=eR9Uj`Nu-GhlknY<$8XYU7h6-Vh*8Xu`dl%GOtM&gX1mpBsg_R{v&X!} z1ICYZSaoKL=5WaQnDN&7HD{|_m1cR^m_2gk%IA$4k>d~a6@R#|_zU&69{goOu5i8W zXMfq&UEd=nx9Kx?y*ak>a4?6j{=J%hK9atclLuls z9ORmOwc;J^kz%3u&<#5UU1TTlftsdg#aLN4~FNcHt zwVeA=UJj?sj%jYptbW3l!|ApjvgPpofBT#*N7%KG+Oi98^|UR!$E_Z?W%uCIkQX|$ zKXc3Ol;g46t;9K=yk&PW58tv==`&*V%~-VQZ2a7*CP^G`&TeXNi{T?CR?}&IEG7M} zZ9GEb6-HXS+J_KIQnEO<$<65b#WA>*;Q@5$}3kpT1St ze;}Is`5pC@`|YOZTRLBD<5Sw89#7IAh&d4J>U#YgJ{O`74AY0N$I!!x`ln4}bys&= zr;H8k^rwBQs?q^6PtuRKw6?d&b2DW0LgyQ(xCw7@$6I<$rpQ_{-QRZROxKyp$M6=W zt~1B+l=juGGjHNENpG1l(!EOwC-IS^mU!1ILR3|D;7#Pm&UM7_CUH5^M&w=KXZ4M` zx{o~;#iu1qiB*-a;7!&!#JTb|x2M*WWIy~g={bkgRBP@7+QYm;jyXR2`WeioxOTo_ zK0x=3=8E#tsmqh_$M96acCA;+ITSh#`0SnC6({+Lj@K|F9r|#1rHdJhO1bM+*L7Mx zC1v7PR<(3vHu3(4`j&XReU`&SztS4(I%~3Jng>*Rf*DmFTr)mdFYwZ7q~Cs#wslF# zwBmDp`W^teRq>3xIjO$>ka<(UQ}|qjdDWWDjGuEv4s~?4KHv7raeQV;N6<;i zgDjoGwMFE-)J!LyeeN?Mb1kWiARQ+&o-&`c*}2ww7qq z>2vY6o~Bq=D~?RB$dO|;b*@v%Oyvj8w4Lty0xo0iQo-3ZWTrdKr|XpBI4`ZQb#vxEz*oifVfK z;OUm`7a~tozlOQV*vC&+8GE%y<(e2(Yg!&#(-K_MvVTp>fi*1$*R)ixX*sl}rLtme z)7q>n*QQ;$Ht)({WZyf0~*i zCmKYx;-?6{;&0*W4CVhzv)=8s%ojTtRZ~-UN2@Mpxtgk68>8qdT$}M785kK0-~4dr z0x*mi9-#b`;iKyK_>r9mF1U_Hjw-3YHXT${(H zK~VTEimf$3)ROthZ0mTmcD2NsIwhO6F}z;n5k-s?=!_p~G2e%Pj*0Q-9 zGJIF$wi3~2`)O)wYuDwa?Akmw-^6$BVEncXLxDW}n0wa~?HJ^Ayr!mD3lB3m{LA&- z>M`9VQjFuCQH}9P1h@k)StEk*>5P3u44DVyv1bvO84qk1;)UKS|W z8Z+w>j9FXavgW6$$sFa=ArSMHF_*a`^W@UYam{0PmlDZb9sCB@t(JjJl%twdc|K} zz4=z`(OQ}0@Jy-!$H;zy75^ycA<`#0o&JK@dmd8XHW_oH923TxlR7vJo&JkYwJ z^#b$JR?>Uay7K6kEeqRT)KQk!)V`bV!M0oUweRLFfg9}op%v}@8>_qKo9Op#tG&8! z6TWQB^Gm&-wYtTYcC^Vjxh|ru&MN$!L}K5YN5AX}edVt#PcO#Kj76U1b>@fI-V1$y z*HdQ|{m`NDIW>=dWqG;w-R0Rd51(sU@~K0NpWY&$J2W3FRdWHkqPFT`EC0eT{9R9V z>!!$&tCoeFzb|!MxbM$<&j0T}=(+F}aDAH^5ckJlI*j(?f7#Rf6!L!x;~U;##Dji<0xK6}3pM?XA`_`ua~7-krCO4lU25_0SeO z>z4lUWz%ttdwb0vA?IexUERC9T>Zf&Km7kmzKD87Er0qGsinEjD)_%v)PXg~I`%m9 z?hC5NIxhI*ul&IBeB~R6-)xoES?=Gv5cPpRzbLsB?75Ktqn;zR zGFAnjLaixTuhItlhZo-eN5Nk=8mvofZx9~3-s<

I)-?)B4vvM}{mH`Z$e!q58ta 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

#_Ma~ha( z$KyVja_7*oUk<%G09OUzWB{%Vz!d?wJOC#Ga6ACV0&p|{JGpS=LI6G=fX@ZsvjO-_ z0GSafV%^5X8>*wz-t5W zngHAufLjA_O8{;Tz)bmc`OnY-eS7tJ6Oc>xid@of%Td;C_Z1OX z_B|-;w)=`)(x>!hyRV4A1^7odcWCMMBu_| z=+)54=aLqs$DkjzaA6bl81#d{&6YlE0y_T%E^KH0^91yrz&hTZH4bryg=IW8YaDtX zaHFOlh2CS~!d=iup|=5RyPY)zy~V6UoUs484els<{OJczI^d(VCFFy!;75rKsb6*C=A4~B^`OTI67b*yk zdi)OiUCbF*`e(ju{af{&I{>1 z2vYsaW&ec~a?kkaw5QpsZ}|!6N$AIY^f{E*rT-nWsOMU2Ag^CchM zIi*44|} zzqXCCAk{4K^%JvG{4K9L%iX8WJ@@|+Yf|~kDWcBij*oTS-s;HobplUsnf_kC=G|Qn z`1_>oBWmr(0)o|zMBl0yzf=cHe0x|=7hjd*)2D*m_DPu#Gq{zkjrg7p*Y zH+)2wPdHPrpNOu}TMAuO6Wd_MBT=xF@`t z_P(beBj5T788U>^%&nLEX92^?orJB(Fn3$xNu3{0)cz*V)4wKdZ#}XXvBPcaedUDQ z3%#GpV5WUXk6YmNgKan0Z|zsWL!>q)9dVC04U^^!mK$o~8?Xj&Ir zgHe5eq)#HFDj*{(FaKJQ>!=5LzF9hEWxPL5$j#or79`&qjG9x_Ydzm6+DJR)FaKJQ zx(X6<-ME90dddExZY=*gjylF(MXku#OB!tO{yxHq?woqbw~ix~CJizg&RH4l2MNo$ zq<$sDAM&l^NF9R>pS-n+Fk2VI3%RPfkdbd4hiPMQN;{eQmwz2cj*RROBp^-n!|ojy z2#>SH*BQp7M~RCcVh8iPjK6aICD&mtsjF#z9c>U~%%1a0N1bRIYb;GOAYRQCaiYv& zssJAYA2;)GmlT*8`(`h74YFm}l0AJII zh?98vi%!MM+nwag>zwMBS39-jk$QZQ)A0B@r%~2L{QsT5nTw=rQDi=jS%0AGQDlC0 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

>5qpWJi9N(_Vi&QK*g=dF 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%0DBOy%G6h(_?t0DEyWWO8up8{P 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

E;Na8O09x2b;hB<8u5(a{ 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̅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¬oRZ>m>ZLfz8wvQ_FCGAvKK1@p z^x@ITc&LB$I1Ym`vI&(PRSza8WiLkBz}ymez((K43JN&m$miHj`L0Uy2Po zmz%w&dym=>!IMA({rLw1`B|ckC(U2j5Gc&?qs;P$`3tuP3P<|$xA_aV;IMygT4P=c zGxXyL5N{9ar4}{U|C1;ee5U}Bp#X#K7PyZlwk;*(x3F0$c^x&x-Qv%~-qk@rhBJD; zlMDvy&??~Y^C96m_9D-d_suaf!Gc8ewXF>tnD?6=4mBmE_9TR@F}I|kQ z>iM9Fdd`LFU{--te_=D8494?vfx>iuAs)HO@MG(#FcW)lW-VaZs9MmC#!$839tdWu z1wIDj*8;dciu=c}p%%bbr{kfsW-N)YFGErOxxe^H+ljwZ9Jf!n*yIx1IT`-aVd-#OBte^4IIoQ<}4t40Jx?s8~S6 zY-PEct#H)ZlcQGW3U(^;-i4Z>P*%SrB0QVh2r1Z^%zGQq>@?}m-i8d$=K3NY<8-`Y z0%w2h%Zz>ea^`WloPi7<9aTcmsk- z`#>AK0FvT9|A0B6Vzhdp1$Mj{JwZh`n@^5}qeHgnkomMpIQob!`iMT!>23}?ohu(s zWu5Dc(^3Yp?y8fK(#5nz`Jpg_PSR4JZK1ERSQ*Z@i0@)C{nnMgt<%gA>E09iQ<%XX zd)ng&euqw`n!-|)>~FF36`qUW7!>xIs1RCjSAH58`?h_@(?NZLn-z2wW-z)xFzYwz z7~e)f@ju(C4W0{bMhx4i<-7Oe*T1y^VZZMnegp0-zpsTi>q&%t%?Q5hb^j=lytr18>HE^^O{*J!-Dr{W<3QN%$UHu_b_iU@&x9M1Fh=$!qM=eJ|}SO z{533~h4s~(T*~2SR~?S0uP)I4xxQ1Guca^TD*9^1F7cSS`sz|B`XA~0KI##2Vza4s zhNAWW@7;%LB=I95V(SeKoLKS6X=cmcD1qPikn$3n*I}$o_uLV}SO-o@BINTScU^cU zn&%x@UZ&U5x;XvHU;Q>Js~u#r-&@Hrw+*|Pc6R^zbqSJHTggyI{Oi|(jETjps;0!t zZKO_S7jKVBYEy5Cu2g+UT9}35QF1LC9c(^wCi*4O>uD2gfBhSI`&Q%LqQZEeRC^T_ zg@;uY)v7pDkAVtYU`D@hg*_g-z_g85iNJLCdN7Av1G)Pu)5rp#0;+5+*`XmKL%o=*8)sSUig`n|n6jw&&#_4o@I~k& z^1j6wRThCreP9ym^Nfn8Fi|RLSBX@KMVUyYC|y>3OI>K~XkA9B9PNs5hn>^tevENj z#j76Qpn6&}O50VXrQgQa=95pTt*H&Y{J$z7%kOx`$zC$g;>fV22c^YY$L%UF>JjkK z*R6OdlNl9);Hb(?? zv^G5ViN%+$5hq!eALcNRT^62$vHE&E7FCleT~$vW8et2i73{e80O}wQU|oyhq<$&_ zKD2TRu-rb_q92xIx0wldfdD$6k|Z)N>jmGg(+-`Rd#j>}9*MDZ z24F1^N0tKDCF48^*Isa3!d6C@RjM+2p$F{n|JZvQ@FVH~7{ z0`&R_-bg{igRcUs8~Fk9%4fH>q~!17D}{dZs=zsR)n?)xJ>nnIs$Jc>z-V^2WrX#sxE51fea zvSaY1{7$gg*6fDSF@@$6W=eP=b@=f3#B;wFnY|l8jAt=i*EfEZe#34EvO43(q_QkpO-dvuZnYuga|?1zpU7ow!Tc>@Q+SX%L}HnrmwqkzUbmGvz=oD{D%R6Zt+LAySI|fTM#5l z3r|l8ZU}e%Hn}l>6&`l2WULq?X)^+g0O2d~`}rywYPck& z`8^TAwcx+BVRD%Th;oP6suCbkVHOUOhWDBl!=4j|G_g9u-m@BwOU`de zbjzus$}rV)PGy)o(Ft?h&I9^}*$(ddhk>|gIZUa;UGWU6cfqSh(!vm1l;a7KFpC5U z7Q9G;;PcWJgY|vCO~2=7$OO+>bPI*qJi@89RQ%wS4WW$oOFK}I7@L$!YMJ-!ZP6y; zs<;n!C^F^HfNWSnOPd;noi>_8_!_27G6~OW8 zxZn{C`{D5$$x#xo*4DSmEE~E4UL%y=GsKP>qE5zR1kuC||F9E_D&WRO59HdeExi_Cr+}Y*e;d z=`wNDxsCDCY(opAWzPAI-Ca;ncX?RdtQNqPTBv~0lxwwJwJPsQ)!1s&2WABNAYJnX zn5)j&L=Vt;?tIR!ENoT7oRay3XR?m5?usP_9_x#92pb_Ao%V}PWODik^0XB#O+EHs zt6LXVkNr35u~(_bKG(Q(##=}FU#ou+=5x^q|3>|bD$97?b9W+3@=r72U+*&EunXbX zRD=FT75!+yfMHcsWkf2H*#P>Von*5{Xs|{JXc~+wY;e+;*hitaz8d3ok1fIaJKB{^ zBWEK_krpDOYL=w#vF(nI>6LsTJvqTI_1}roBISnCt0@PI%yEAqu;^phI0IgYZSs`? z7AABG))e1cQ2~7OpTG(U!+650}1*{YGdVm{3c{FLb64D8fP3Hx_LBA z9CaWY9Ul4`Eal@#NzmiEzSEIg=t1}r5VMXsO*H%hV*nxMKbo(_Y=Rmvx^#t&j=ic0 zuZU`NTl6w@28|5@y*MEckTZHF8KwY1@V8O8bbxuIQ53+;uR&Q&t+AV^m<5}}E;BW`(r7tDAmc4=ioKDp!N5#A226?2cGg4Wp3xCQ zVgn7RP;IlvKW2^umH!bjMpl&gifDPG-xS;SKZcn1R#c;r(GxJRd!2u8JKO>QmE3v! zWesR{cb-r$LH_0gRg7vc&CwNLXM{XNr>HOOtO~>IWvHxm0;8rYwg)-*+_%PMRMiO& zuieopFWVXmwU=TVJD-fIHIk-KItbwHRw*=T5|>d`4G61mm~o2CgYsm3LUtPhWe`i} zKP|&RBjuQJ2C6k&Yv@eTg0-YXK{#sh314g*XJLLAu2OEqR|z-l5paELLbW#_*~#ykOfBE>fQGq6}SCp3>)-_$7unhFXp9 zsqxtYT~d`)E6X&aA66YrJhX+XP{lXhw^gh#+B8OhxL%g1I45q-#}})dJitrFy%}9? zURpnJQgH21m91yeViA(J1!<+B!tTXvq5%<@O|aGyW)mF-^nLBF_xiquU936lXMv1v zh&%+49^jB1svPb_A@z zHAbL79pDSFE|}NhY`Hy&)r;n5g#2vW)p3Ki5^o&}ZMR-oiVS3;bWO`-A;%>FWRTiz z@OvvPRhNN#{fEs9r)aCp*lp5C{XeRldim!Qsd zr4ysTdgfbI)uqjE=8f3K0_psG)5V&BytTJ=Y6V#^?oZDLe?uRU?)$=33i=Hd;gFXQOZUxHXv zVy10mhufo{br|J2a#LymS7&)*rquEh^cOcUCRv&J3DjYH3(SU5qQsS%cfda83Eg!` zs8$^y85L+>W|VMMY4@sw5)MR}PDUL1=5KiWj7;5m-flm(O&yb_vg5=kK~Ha{2~w0! zlV~$-O0Vo=X5Vo$ob-988LU0OX(;UnHuma=&RR3%N;4J;`IS+>BE9- zmkPCK8X4hClOj43pFYA)~EIVbP=HM1iwSj}JM&q*# z;T%?0XPv!Hyw9Qu1Ez?FGa7#auC|58`z)QAUxE&uXMp;!8ZbFuCzJDtu`^a9?aV?6 zW{RDy5j)$HUO531*+f%JpF6@}Wf=+y8)hc8vvq1MiFUS1>tGpRayzqArWp?Qa#xk6 z3^Qdbc6Jly7l*L36P!BI4#2iEIj5W72opJsGwjbWFELN;oQ7vS&>)u1W8LH>Ax;H7vVGoK{hzN6?)93Z~BHG(WL95z%^cs)8W2s)G#} zl!(pAuJbf-Y}#9g5*(sAX~KXh;^8!>`yfv8=JYJ{J4kb)f7yb?`1ti!6ipX+>`5Y4 zRnkC(b^Tu8XjW|DnPPEiK8o3V9qvS)vx!UZj@wC^NO0YpU6awNhdjBVa!z#QU|2pb z@a+k9+JnRK2b221cziPr$=vwL&&EvvqQwkdxy!H@)8&k7{-xxxTWTsp+8AB|1^T`P zd3Sn3$A&r`aEtDFxIF;`xJ$Pl_j{$D)6Op$Bp$NG#Yg1RvIh4wlAkY6uG1Z6U#ELY ziqvArmz8|}>Z@ako%7d(R;mM#ZT>D<`#@pr^QdNPChk1yG3056lD($H+T`p-^@Amz z@z-c#_Layfnpo9$kevIP#B6}Kz5qT4F{k@M+FS`U2=QSndxZ8%?cszXtIG_vF8`H} zg36Z*DjjeN8|r28#8`kmn#0*;g#||Ao2|)|y|4lIOb8~rVj(_5u(n9)OtE;5Im32m z>{V~=jZIu1p|>l*tGfUuE=S`i0rNJh<1$W$EPS<$#pMEs3sq6NQ0)kQ=j{vKv2VjC z?XX!LTlA>Ba3ZG!0ZJDdu`lIyyuaAojL16_FKhxjju_#HC?iym=a;gl`Xws>@<{C~ z3pVKseg#6D%OqRhFls!HtO7ex$>t@1)Gy0{HMvWrQn1q58@@{piL()b!VK%yomYO^ z13yk_1#7b;$}IE=NhUbpFfDokqb#hJqVm9v3vt{>o!u>)CSu{p3(oJ6J#~u$Fhx(3 z6Z1wo9K}`kYRZs6c(K)+ip=enZ88%fjljqz)6UXJ3uf#CO!jiXd=9n+Lsho))JDi7 z5}3+l=_LX3GXlm*hx|<@MmNYdH&jJsl8TlKCFF=)j)LPP8w%eQ#FtV55u8FWd5Uuz z6-G_#@FkF{WPVbelt3zyG8L%mQT}W#zo{Kth&v#}oK5U`9lN8w_RQJkVrPtdqSR1w zQ6{sR9Te{$cvw_0a4GQ3*uKL=f+WZ%bui8YqWIZnC$5{>iF2Ea%7D)@hvzcQo*b4g z$pUz6*);*+P~C2Tw5BVc1=HxA^fDwgpa`fJc+3 zENssu50Y?wP*f$-($=Loz-31zq4lzYZonDbOa6lH)Jk7)GDZNDzpmSKdMm>Kg%Ybv+nfw}Mx41nbi)ha--g1fEKi-LoZh&l)De zE3pP(#DJ{!rRUtev#&;X-BS%B6i1$`xo4FI8l|(3_R~Byb&wt&k)Cx;oDir#w+4f*%|_0KYs{h~ zDRJ)@5AeaFa8nkl1PAwiGaA4AccpfkS&9qLLY4j<2&Zh1G%m_PrR_uDD8Nj7&d^V9 zKz?{Im6f{dO}GRX*`Zl)A;g9+ad*Ct&`<5qLiB+xeC@8pefURo2>RA^N(6x{BMvVU z?afA&+SK9)Q77Jrg*Ou84GFk-D=!rnF2%nO!to}8VUQS)GIK68UEUr3`W)Ka0$fdp zBM^_{lw7t{hxvP6RAUE_Q;&^D!N4PovEtU?cO=FlALFw&_hI zw@fptrc0oZyQXpj7Pgzxc3eJd40Zb_WfIjDj`TyeCCLG{&&Y zC|Ko)vBhB8LJvqY3aattS%#E(+4vRKW6!w0PWGG%DiCu!#KTqe__~>W)QB$F%i|Ww zCMK;z0Ad#6!9g#dNj4Znx%hOFYZ8>;DglE+oRH+j*@ZX^S@<6iQ~WEaBF{RoKytbo zr1J8#qW4RQ0SzA|a>>IsjfnpapJqgV3S|Bo{20sVa{Q9>Y2}c>`yMc!YWyffk$4=$ zHDwh-dl4vDhOa3gD&#|W-p`cMRR98!u7KzU1bm=$X+?Q)psUbR0R&HQWysqDfWc8U zSFP4sF&Wev?V&bMce|B$p>GkQuxoCf)bdI#3&(&eyUJ8zA(dUkGr-VZAuBRNxLyxQ zGRk=Ijcj-`C|juZ9Vjxm?>4rFlT{!#cch>}!aNZS_mMm^s4cy7q~mikKIiDCFCag3NcnuecZ-b48ru1)jL91M z>>U}CHS|61q{o=7q2a&hNM$atO&pUK7)Lj?>Dt+J4mr>|RyF4A;yFN!1?m@axbBK~ zj$$~)`%5v!3VNzT9(T~QJml#X^ehW`vV)$bAy4<9XA$N_GD7zbdgg~beS)4!UL>m* z*uHZwx*Qa#^Bo+=*Q)07s9CvB6K`#WJq*r-NK(hB^bu4`xOr=*FoGo2dF1sq1GDHqGL*!sHL=HAXnvQJ5_+N%mW4Z&PphB9U;I13$EqOms;sbo_5(5~@C@dh`Jl#W#P0R-i|Oj; zED#R6`yareG8uUMMO zAi%4?WYhVN@A+nsv1Jv0b4(A$t zz
0nQd6Jr<5(Ip|hrcSyCbKF|}q*e-*wJtN?yR&LDWgI8gH$0f0>^0!2@3U{N} zY_O=0E09%8M!qyOD^yDYki*2m0PXi5Ai}yGu%Y#g!|7C*?46G=lg_bB(2`<`1n)0E zfSa2xMS}_MPS3^hdQnT0M-m?0dcs;JtYS`~KA6P>BEfG_1zRUz6Rs%@aV?pxDLG`G z`GP4nuC!~A#e9Py^b|4)j0`No3m3p0_23H2sw7XA&hFMNw4Q|ox(n9$_-j}MAR@zyaH)M7E??(0^{JutVsX%34keOa ziA#rz*ly=+VmBS<4|c~I5#CGGMDEvt(a|6d?%uW-pdeDvz$49^c}8-^FW8@RTTMFz@Bk#~36k+@fnAox`C^VP{RSsAVA^lJPWl1@mv~gB2!FqDg3X=3fC4gKhvicuB;aAaAn99V3kv28YfSk z!d4m?XRj2n)8$wbE#Ji;m&nP&)%Rq|=zBCKsOGwRJ=h0F+hQO2gK$><2=#WAKo zl{a8=Zx`KCe=Ihl-PnC?Xn+ac{;bLl6?lIz@QVKJ+|1gJk$M?P0ov zwRD^hNyN-HfW(xZzUm{nh~HU-@AS6{JCf3?DCqFK3~*@Bmz%S}?Kq<$17X~v6pfoIDV zG1A+sK`JZVCu<6Ljn^Eo-km8a(n2GhF+0I4#_3UVqSwiJcg1uJ1Ax_hs~+H@Sq3hf z4~SXYru4fv!{x)TH`DL_D}I3{zXD&Yr<+#B=1&V%i!anQ(2UjVV9jU^-=pPmop&!j ztH+q0$9}X%-m3s!_KG=Ilvhj?8op1FtE67r^IEahG{dR}fnM>5XE_T1_ePy{AtS7TuW!()CJ;_VwusyoZIY32!b~KL%XG z`Rm?W;ni#ikqv#gFebWk&LC9Fvkc)>JWFX=1O4A~?va~<`p(GhxYzfAHVQMv#72{E zFyiGdg?!j=hJ7zr!FHgzsbF?;!@DKNjH*ThS6ikqfi%G8-$Ov~B{7rPr%ZWILPq`? z-rj+GcdXDFK2OUD%-737Pe%qD_`(Or3jonaQp#?9@I93Ra5xK&UzyBt0DEp1&IzGcm4ytMhN9QD7wq2-)n+nN_=TLjp$j?- z?QPB`I)maJibb3)Lt~Sax=^G<+u#rsHX88i6+GUsOG@Gm7!5@q98o18*TGHuumof* z#vC|7{~zb=LU!DA%z?@{y)vQXYIZl)C7@ej79mOol(@uzU5SEQY+i8*C8xJwlf2dq zsnQqp!Z)rRq@ARPQ}G?DHAa0lTogPwYl^3pLC>;KDi-x1?}`Qtuy`$x+e65-`|TlQ z4}LYz!iGF=Wc2Uq!xs+OZyPcWwOMxJ%`0xs=~qEctigmTX2WWTz;x3JO;7djPbtgr z?{9}?0a@aKX%@5$L&;n;e?VCX0pu8F7Cq2D`hE?uyoaLl<6SN-=gUG!i@g9chDE@1 zztdbmJ~#-@oL1P2ARqh|V&MpZY~^l_uJL5SJYehfo*K>#wS>5tpkgP)#FYx-j$uC5 z1^xps2n_~mpxxMxMi(r6WHE@P9_Gi93&zKsBa8QfCC4MY-QtBjWb|!4%kC=<4Yps> z#FwVv9iQNfe#BJ_d*2HNukY&fnP1U)Lcxm+2EdhQ*?MPg=d~eUW!) zdRB{zeL_i=K>~+4d9_%CYaw^mxh{auPFTgf-AF@gScQ0W%xnnr`1)CN^y;^oIN%@I zE3}0R(@Z=D82kLWcb;x>1-42)-i2PF$p~*p7#E|a`i_h1r?OxSqhz4AmxrLn^uY9v zkQH}!dbU#PdJp>-F1Q)6gCKNgYUrZ+z&`L5tTb2tYQDZRVhhs5RSApp4IPB9K_~CZ z-6-AVhP^rdy`6ktgr(RaeI(3vuTg@Fql;@6d$Bw`38)%dX~uP2fq?b`4RIpJ+c2mp z?C*M;0PQXE0X>nn)(b+aw1P#i1ByGzh3n1O@A85_=UCCH1Dt_Ed5sb9P^tGFgxO%_ zfly@lB7V~^=gX*p=fzIg$j6r#tDtyrIr{@dQldtDxM#f!5c7(R)$A$|-i_b2?2eIU zUX!UqX0Vm@mu-ZV0T=NyF9A>PgOdinKOQR7v^}LxB_EVNL+3C!KdAAx4XhIza7AsP z4q@}!+OV$@C*c^xElJp#LAO2<5A(_)h0ej+Wrzs|mhwCNHNKlKhwpEyDeS??PsWEb z(5`XfXF^INATl5k3*bp4cL;tHh-S#c|O|P!1No zjDO+3I)I;MGINwrLT2#d7;6u`y`^K&F&B7y;mICZWv~U_rF1gV^5~L1`5S?5mI|bj zaR)l}#kv6$J?s7)Glp*h6Y7b36HPUb=RpD-(G+Tmh1l-A`<$oVVmT~MLo;ND$1V+* zPa<(ho}H&Xl3b^a7qHyYP0`D`6(J<5+F1EU@a?j6CYLXG~cPpOeW5; zakXo=rf)+SF}d1gb`RuLFpk}WUvOCwgJ=F6K+5eHI9FkHOMCCQsaF>iBKT$HW-PCn z;p@FwD2HjkFperL^@OVEX;D(}V;Sy^T8x^fE6nZzRwfgCK=r$DkAdJbBp!AEZQBPZ z?2CG0_k2e$>bV`VrmSZ(J!?JNd#IM*SO&OfEsvqrO6S8B{{_%|bBO&5E+ELSh|wV!T1GhviodyN4SyPi9u72bx>P;lttbG1Jl6 z4uu?+4(*TeV)1-OXH8?QERzl>@+3C;F%;(|M++ zYL4HgEOWUr3?EAPaX8J(987a3dPIHYId zw!-9s8-2(2s;lVlPG4G=B3@QRJgk&=&U%}z2&-~v;$oPSP$te6Yn9G1K0_5_Wi4Y0 z>#15fNh)yJf&{F#`KCXiEx7zA&69~tKJE<~O^%BU$HHoI1P(;r55Z9g*eksWWYbsa z8(+tIN=9)VLhk~L8(#~sTDEZ$?jX8GNxWF+g9C>zJX3)9O{ikT!ZF9Sqef}F&H6r0 zKysWi?OZkpR9A8>6)L;w+7R?FYozrRc~CI_SnbB6aV{v!)Q*!v-);;cfahL|rk7Zs zo0uMB7g)3lr&grYr3}c#V_)DbOCHg8E^!p7_v~;?aj_k?m{VL_!Fq}D&c!ou_yp;Y zl|I43k^_B$rN74Tc_y-<5dbY|x&;SoK*4?Dz zlk;ZYttTeBgz+9G&o&Ivp;@WHf-TL1nHop5Ig0AbzD|N9c>Rod`)vB%FG+^mP>jpW z8&vU<4z8Ga8l~kI`e)1lJ>7}I3fdL=N;m;xJLoMD60fOc&_NS}%wD_@C(>p{sC^GT zGdMvP1}ShFUgw>HQscnH{O6IGydgIx7^e?(79EROueXf!f8XARBQBI1{kq)Xm-laR z;$S~XU%-6>GGm23lBB{unlG9gOrd_b+p;d1*(H6!6R=*f#)L)nuOVa0FnUG>J5VLm z{nnO?@uE7X;;X?C^6x$!Yc`|E40x4y}I|Zgfg(qTa9LE#7=x zjM!owY%%GZ#{9^PMH@LCF#hE*S!CSYp5+^i1u3%_!*^(zV^K6jWT3X_?{Cg<3^A`K z9+C>p&&h@z`|s+K5+2e;Y9_}-=A=qbnNh(hpy@OhjloY?)BK5m=q}I=70vG>xWWq4 z9c4%ydmz*EWMdQ5?%xWRX~%~yMs@%eWlCCag-c-cEg0hA9?;m=uqcT=Kut2_IwBWV z;v1*321L{71ZT0dHXNIh32s$5)}O~BK7RcfZ=J$p*RqeiXc+7(bVX)h^Ibzi?XWu9yJZx*oKTMQ z<=VcZ=m&g^P8-kuB)WwSECk+PwW%xKsPxt_vp|zS7hLVi`k-aC#LC;f?Y!Yy&Xv6L zn0GE;)#dBek{23yV8)XVBjX}u9L=z~Wu3|JFn1CjK@sA15~_%B>?HJx?j(%j{xOGZ z8Gr3zTgFLlnP4Mf_dlVgYY#zm$;$`UVJuNxR%0l- zoN~5dj1JcCMxPPO0K=w?QT5S`#D(GgD{-Dtlog`!IAleI2ugo!9a(6vYA@&@v0;;t zY^Wnyy%4iNHiP;KyI_)-R?$jvQVbue?1H;cyS=-S7J9Ur3NhoB<|BSebKRBF|HwNn z_EFI|I_z_W%h%L<8t6o0Z^D2z20U*-Bcc$ulOV*YxG@LTp5Ba$JR>7>^>oRlwz^RL zxL7aj-*z*kvY*qHL%@x9(#u-Y!FL9YdH_OU|GS`yOUZEvJ;PcLrWK)AFTPBh}Odb^xieUz9&vl<%B>Y-y}S(P!X6_W7d#Dsy~h_tgh zDlV&ACB?rJQ)pKILM+aSqhC6jMUwk=T8_u5==8wp$lF|wN`+HFZXs?2u`lfZsuhk4 zKoryI=d)SR_7juqbc~@*K{t&f>hRfr5|S%DInX?UO0V}c(tenC4H$*Ovr$YwU%Ulq ze|aM+<8F{)Te6i5B1jbzW{e1PY%8>HG6&BZ|K5(iF%T#0dp=k@jB3Rqk8Sld?he#K z!SiNLG}EnfnL0BOs#`~aF>m*ubgMkI(5_cq`qR5Z0pWzyJAMW4|7cP0CNySqY_%Rp zP8H;cIOdEa&>Yl?yM)BXLUOtyw4O%b-*~LQu2Xv6#$J0i>}{X^_}-Q-c%A8BeW7kw zTsXNqmfqET39^xS2nM{kjnT`{f0_%VrB|$_EyISe^X0;dGWI#Sz9qY|XkoI(3_HH% zdn}$c9jz?UDR;%jEc@14iUz7IBe1aaB{E9b!OeuSnjZkOu)pl41QW3zXqU!!F%%T5 z$7Odg#VZpMQm9EEZD><{Bg1%;G3=_U$Ve7DpeB#8S6|O{{pWGInD&(mo*}&D8jFEg z|HJc0c=fPnUCXiN5(^noKtUPGeipR`q`Mlq1!X(3c@=6NLk<@DeBJG>|1u;px4MwU zx6DMYWNDd&t3Ks2mX`ByKe4Z$onVk87*C0j;B*>>T=LQ~gb8f?7E+-$?gYduI_gCL zWN-P-uo-=SJ9D0>jP914B_w;FEb`T$2uVt`==A2xjzR+DL86xX!%GfmQ*sA~Z3ion zI94Ma5eoZTYgxA=7Gh=M6j;+Z{FV+mP>Fm@_PFDfVq$>eV659S&yx^R{&^Oq6yl1m z-~d@q$0oc<@)D?48(h7p(^UQ{Y(ci2Jsijn$+>jyc>Q15R`UN>&;s2|o-w-C4kw zXM&OJq_#fzTx?RHzq==m63E~qXJMN{OkUMTbin==Y%#RR zimNqtR!hOT$t_tilUBO_uHBl#c2-ihFSs70WovB^xGtLEQ=MWN&SHj-Gr8QgYnUV} zTb7-njN#=-(R$ag8?n$ss&6pLg$|ypKU~6xIfMpErw}T1b_(Y){{uS(IZkps;+!2p z9^^oE;yvcy`Cz3u8@sC`Qk%1}asXoo!{(YB*^i7X4J{Jt8*U_2(|8=5OtTUZ#h~I+ zp^M0(9NM@#QeL^=nLW2OGg^S0z-MeI6 zG4n{n0^r!UG`~yhm%FtosyE7nJyAcfZvMUl2t2shs78}uFij7**~`BS2BBKw!?ITt zl>2>faZt)`yvP!0)Ck_*h#$dr6me}C^O6Y6*wW{pz`XMt<#b=Y9NptU`{svzx2A`` zhwB{*a0VqsW^G~_6XpFSL_~eVmR}=@Y!k5N%T7oQc4RKYnM+6Vf0_jOjc=|T4K|lZ z2I=94h^(a$mvl^DummB$6s?`vrO63OrpPQ*#oYUj=#sv$oK)*s(46$j>B4{kkqo;R zSX^!T8*&w~DnCO^^94+?7ro2*q&B_F8aUZ3#KxfPe&dK#R~(T_aB20b7hPyN-f&fC zwycz<)0#8;DPoOc`ZFVSW*0%4rb`eN64y1((lnFDOhU~hT{3CSjh!3KL<~nWk)Gsj zETZBOG~|~olc8~${0X#Se`^lx$)FVnHa$=#CbE|P;UxTI{Z3^*GHxa2gLcvM0b-#A zEzCg4r?oMxmYfd5JN%S%|6}j)h1;Uu;Uh2x@ecn=LvN};{qccm_@stM z9FZe>2jrn=|Da}OIv^Z&t)f`sMrMa128p}}hgE`dDn|8|94YIWqb8(}V6^PY}z#cqb z&#eshnx?Bv_v|$ekWq%HfGZkw)y<)6E@~hTE^1(fIp(xGRy1B$7U&g!H;sj6rLr5J zLlxBKF@$dXGRB!Zut0g9gjlX;o6w@tAD8=YFKg!S{Eg61%D~K)0W`!8r1a_e7rkU6 z`t!UkcxS!zbL{!W1iI|}8Yk&FIp5RM3^yA+jy&e^q!283hKTtME7WqIBB!?8-UO0mg+bp#>VnQOu?JSq2v@Ay!Ty#Xx` z?0&=k9xvZ0-$7%Wks2(omSMuT6m@8OB)4H=`&U*1ll*qM&bWD^Gs@R_JA~-Q?wFc`lRemxjyNMF(wjy_kC>D%8^$ z&EH%r#p-XW{~T6&X}6X!I5ZtDSQmn#3YKfr!etNQ!F_<;lh`3@-1(GV`8h=Nm#^!b z9{32qLRVoTSQknOt?Ml!JTDBobVClQk$3P+I7@pW)|s2{C$&>Un~ZvDsa&WfDk2h8 zApskA`67S$rZhYn+Q5~0wBtUKNuv}}_bgs-8N~BYNYxoiMUBCqhh>NTFMu%&)x>=c zj%+pmVr~hori8hnw$OeCk-jY>4rU;k$%UnLM{V`;xU5^&M0bbmx;}z@ zZ6#GFuP-Von(s?^UM5;k&5nF!eP8rhuE!DL$4dWQMP1YH*~URI?k10Dw;Cv8Us1*H zFs_OSOvVrPgkk@t;SfNl%s<0IG;WgMO&fM@mx%>8z`6*(x^3B7}4tY4z0e(#3+{U3b{6eOhp6`QW{9{U!h1UMTHSt?(Aq8 zPboV3o@+Uq&&FVPDl}u1>@V@z_zXT1njsev<}c%~YJRPXRm7u69`>hPb?AyX9`f{h z12W@ojDp6<5bPOtqsGiGC6}7%({v?->Gb5KRdj9Sq!W&j(|yk7eO9^f>T$Uhj(}n= z4uB(|YXGp}Q~}VXY3Ew#;;JIJ>A1`YyC(3~WpWPt5KDn-z8y!WmZtAGmt)+(IlC4> z0`dAP!UfBMd!u*VY^TRq?~zMx>OFepjogY8lxJ7#EfV}y z?~YTExK#`S+J58JdB$&SIhGZ^*#$mmx$k@)~H z4;fZeiRaNMf4yYnW03j#r1)BAdwFjs+it=(_fTvX9+K^I7~W#izB-oD4mlLti^2Ag zdU&;`lXIzX9+Q6vJ-i1pf1i%NDeOXLb!q1tPfs=MTL6WnqOzo3k7M@efy>NJm?$5L z|AA@CD?0knQWi)hov78*jtSNMyu2^W6H~+w#{dUU?Oni_0=6I&_Fr)*1zd!z5)@D# zZwOosIS&d5h#^3_65*Ur&c-+r3_<(v9U$W!Gj|zt!L~A|o-}_Pa^nOVtlkCg!qB zyACDBQ4oV&+nEk2s#~ezrE%))FB$k-SLfp(2=#>6XFAl#J^JLeb@k+!`FvDF;per^ zdlY!1A^Of@XHhHEziyrSbV}mc?%#_Ai7}n{dq;Rl81&Dip-B6J?*!$k-C%3iQB7tV zxo!bwkLQz-2!n660m}_oM&RfMEO@ekRS5oF7B-TuQ=|trV0=@%O}r9i7)-kPUBqMeZJ6}e z=yhB%I(%L*x2ta0q9_lT)Rg~K>au~I}V=&XwN zP`({jn$I$q?+E)HO+}vN3+_)U7JANr4{2J4DD#P~ z!nGEB^7`C)`;eW5=g@!d`>NNTmUHxM&L%TM+JxiD{*a7--Rpvtk_LUv;HEs}jYIX9 zOz%>Dx_`gB%pESTld4q*^LUZJPEY)7X;~FAwU2)47!kW2rY9UaoMNkKl!L(E2b+5x z;1eMeu#T>{E=hxJMa#(qR2(Xf0^#Dm^gtN;3uARqUZY8shW#f;?Qv5yDU$pIN$TbC zZ>qptnkU!gfC%*m`MRRV0Fgc;E>C{)q0uX`ycqVo!8KINr$tRUV!UBXn2aKar$87I zma-d(D&Pfr>&&ynO{v1>G_oUK{h6OPBZxWut`7fs&e+Pj;n#HQ!20fkg9 zmd-8?Ns-`t;iS?|Qn!;?C^tjhEhn{F`M8i(A7PjMm?oyIlIA0uCgg;kxvTcMvVBD5 z)9>rT4xg>8A2$}nY6sa?3->Nz2{pRM(H{k){dY2^5ZB>tLXkMAH5Q16*jf|XN3vE} z%%N6f2%%{Ak86*v>_YMjy54=%f)W~2^zh=gsW&T;I*mvK8qXf+x@D+aQ8VK?X4$W}w zST4|SWvMwZg1L-AE(vMAMy<7$#)tOb{0HPSXA|ew(Y>TOyS5|9Be8h&-Bmz$*KGb> z|22`_5SH^$W^zuF?j+&q6Gly^q4@R!Z;m~b?}J~xwcaDUJBeF9@&MQ!9n&kjzy(1P zIa&pJ*`p)=Yw=UMNO$l(J7Qd;S-#co4x+7@9YKJ`8mi@Y*x&zBD2<*es{Y*3sG0Ju z9m~xAFIG}oHOWUoN_)yR$>U727vh@7Lmn)wajj`Gvy(#%ArB8pN7tH8l>Bz+T9f^_ z7j%>R%`z-_AepQ+b$}qU)&x7pmQK?*BWY7c{9hvfxWch0u(X?)rhJ`!Gb?#X&gkZN z=muTR{X&r>^U7}~qQZ^9vdR=deq3c**K&cq%CskkwP0>s1=M>)>>KuU;fYI7xXKxg za}YSN(#RMve;MXTjrg$w&)ox2h?_t%^!7oQry7xXdXlfQFn3piumHSVtCyh^MDmmr zoHO1Q66!H0QRGvG3Y2rr?Pw7Bt0j!oGVc=AjdJRly(hq-!o8ej4kFVHq?H&-KQPgtZAh3{~683aJC{*D8r(dS`s;FUbx(a2nQc9+kL zN_ev@6}aYX+=o1X%Rx=Rca*7RST0csnwxUu4R7ewAYobsXqi*f^~^dpU5e&Dn?=)N zquS&u$OA;2$Rjv-Fk(iRpt)FMmWz}6yKtxEOYE;U(^ZB#e+3wb+<7x~LrpO5C8}8b zB~kuM;ne>khUAbTt?5N3MIXFb;gl@lfyk>zbF?uJ)vsVCK4{8V z7gDh-=AjcaTq110o(0(;1ot-j@JSOFjU|z7ow3BT#Dou)cqxVRKqIN?l>rE@j7*C> z5=K{&k$KN#Vq(*f4kpF1CNZrphn_EWlkl`}1BHuicT>l${GA3ox7K0(^5O3v>u=!W zCg(E&;6I66Kb9ZIx-T5v@(s-8HWnVTJ&(e^L=u!XF20#dDVY8=7liTd?tVYU5Wx zBh_*vFyj4jT3Gm`!|-)m1$Jz;QR|HOjk%Y z{Iv!DX|N6^*R~?P=z1nAv@6~o} zyoi%I{K2J@zqZhi+iQmt+ED-WFWu+78Cq&9^OpTuSvR+#zTn+Aj2%rhpiQhr-*mYV zW>OofyKOod$FxQ4sV(^9kElK25`{Li?z@ZUW$`x|pC8K)5CI%tU3K3MZb6%osoSYW zz^N){Tj!9lecyO2bZ%JKNolHGi3K zsgViGPi@A}{FAQJ-QI@uH2E^4r-ELagCFC#G9J!5COjgotbOQ;)Xl*L-c;t_m5H;_ zOHq@!qzuonG&TPmKk+V3Uf|DTz&zp2Q_6c!!wGmjR9uGNJXCxJ;aVQ6d3+H9Ps-i_IYRg9D;aR@YAAR9 zzEED55ZJkL8}O`6hP((4?`yCl@oM0lRK{+VSROI9Z(oX*Kc`c8M2^ogn&uRwsLQk-QP0I)2(ILDF6srWig(D>r} zxtQj5#ypNMC;Q$n!*}Y%82JMoNiXEraro-4i!auoqfN};*yTg4ds4jkvBY+8zQzxx zN#WOt_#%|Q(=~8DF&=!m4c@Y*YRtWinTszh)SEvyawW1qbI-#H~7Kd?~o!DUzMyq^H(tS)~VBGPIXV1Hnq%MHuh%snZN4UueAJ3 z%k7>rw&Yg#^l6i(mi2R=Uh1|+luVmmTv9fvxYQY#K;8A z&F)_a&t%*v_RNxLQ*U;c-9Eh-{LV*aXT{|qf=rrf7sg#$R#H56id8nTWZF!q+C6sW z*xM;>KesikctY8<8O0?=_yg0NKHfc9NlN=!*A`DI8SkDx_U2-ncd0dSEVYJeb(gYU z-Psc+O`d$#foKRZ?bc!nI&|u|X(c5v2lrIpl$((Evbwh?TOUIoFo>QQ( z@rOk}YS5920e*pl1bw-(>-p5iMlbKg|#9xE-+JVDcxGP8nM^ZX#L? zPX5L$Jz4pgDO59fTFI2ru-IsmngE2@ur+Ytv{_;>g1Tv%Zz_8P_f5d&k1Z>~t^Xs7 zOQ-ot#ub-ZLrSLkrdy+|(IsQ2!r)L1crgM_vk$edWE-$szuhZn8!-(OI-qfq4h1M> z9x&URV89gY0{5VaV@uHajB}%IOKxYCNcV_jr4y&kJWuQ!X+4vRX{uCh3=az~L94Rs z!nSO*3KRg{n}gXDG`RChi_6Yq>H{MZkV16Ga+%g;T{~$!tmRrOuXxhU6U(eTYbXsS ze{AWk*3f)w;H0wB5yd5grcIeXZ7ND&4IDAZ$}Ju@ZG5qn3sr+^lzg*I8&iXZ(VL^A zE=|@K$NC{_l5u;dlNqce! zsoQX#u?9QIP`4|m^^*r*h8f$ zoi?EiLvZP>@eBqIvW7TiPEO`NH>$mxrJY2}n4I1kIv!>)sf;r;xMN)(8}h*&m2}|o zw>w9`;X_T=c$n!&D*wj*@%fruk$)n;{`dcuf6x3i^W5CgKm5G2rnl-$is}6g{<{Ox znRuJufpFg+zkDPArV)QVIGu@&$raU)<`<36(O(rdhLa}z-DQW5G(M3&F>Kh!`0FEM zR>~bChK;mRW~X&};2QYPE?1Whsl2hQ8yN7jZ+9fZsr6D_W(G*%5U# z3&D~P_D8-TeMek^b3j|^j2L5gq+dmOKHMMqiu5Umrr!?wuWb5#UmTKu8g#Yxqy3RD z$^Y9!)As@W4BYVZHR-=PH2p--_rrTXh5qw{({}^UWuTvri|7y4=hT62@F)8t+bIV= zj=qVtjy@;8o_2#M7dI8X(<*&BV(xCw*3u2X+(@1YIruv%f8bd^d7x_o-xbI;wNJA0 z(Z*u+ISce-TJ}f2JCH94Rc?RkJk+DqKj`26e1GJIgSL?v{dUk-|9gLA{(<~eFJSDD zCk?so1--XbdN6eKn|(m<-n~D#L4O7ZLRRAhek;s%*>B+?}{$3qu_ks3&m`tj#If-q=bVJ^|LBIdFNMz`N zywOV7?;75u&B7{f*71j?W&6zoZ9mZd;XuCH-_l0swKq+{_!zU1<}swnqU<}HlE@x! z*N=j}=7dOuFRe;FK3Q4g>34v>+ewkg##UvD)ho-}1@`(h=mV|RD|KW1>^`7%{VWps zMOtfh8q+&%cp~Uie-Sx|j|WDM@nsq4r{Z-g$D_WI+e|$F2GEb}5s54~@$l&Pg8ng2 zB(fMPNX|dL56VXO>%tqA&uCRQtY$N>U|aWszT>b+*$AHPx#quHjI?#P`dnB^x zp!$uCIZdD+JUbG3rPcb2wH=lt6K>##<&j9)LFrL{6ie$*%8zuX+!cxJ0y=p)q#rmS z-F&2b1L=-LZ)~%5NH?n@65;k(^8ARMCv(?bpltx{^h3}}`CaG_=0qYpTBT(<4y?x! zNVf**-aV+^V)ar1`d|7ZkrM$^-^RON4q{)d_cfp!xFm8Azmt7hY<}Me`o};&ntd!{ z4z$OZpGSSVumkzVy^#nPc#_k{^m!?0C)^i_tUV0ciJ<)gw1>lYDQM>|J3PL1pgroh zkwdOWuxz_Pd(C0cQqP%C%kM$krB%Jfx5qrt-?=;znF$+9uD4jfMf;is`j`G3i7Y|4 zpIY)!l6wCcsIX$et!2950AK(AfB)ar0P4^AxARHMf(3P${)B-KJZ|8%R~lG8)WH3D z1`Z!=V6Q<2E*@y$5QWd;{5AP4Qur3m?lAoRr3OBJiGjcAXW&H&`}Q&6_bxUtg3}UA z_a7K3VcppVK7WdVePFl5kB2!E?m<6CSd79EzVMlWPbr+C@LYwvn@#*0g^Lv4qVP(E z7b`qZ;TugRU0IV=GyfOJ)UqC$`ytM{C_Yc&#AC%qKP7|rmI~r{i%vi1%9U^{r>k<4+>v;&#GDDh<`!xQ-LpW;72OHC-Bo8__G!N@eZqI zl>`4A92ClbAMpQil!|;a5FX@#;;#Z^IbJ~@L3>yQ$Z(E^v)+h}Hy^%+gNBO# z>~++;+7t2byl&F3QMgdyT+rF$3F*cw{%VD1D@;-N`PSHYLi&%l8osY6{ENaRptHvl z(uEa&m%>{S|G4%uj31}?J_@@d{t-v~I?%A(OBLoQ%u@K`-%b2O3a2S_0a9;i8s7P; zp?gx{)e6s5_`?2Y$H&|Mklz{R;~J^s-g6#1S7>{18Cu=NAgo6h67xstG&jf4AB23jrT+ z;ENTX5B$vz{6NK@2uS`HqpXBKQMjkx@cXddsu`*2E?$Q{7R9euxI|$<;Y@{-6wZCg z@F`Q+`$ZEzMPaJK&o@~$Bh;>$&r6#O-Gd6}A>Qsc7+<0I5{07`UZn68(4XOuJ5%vT zDctop!~b=K&-~4*`Kg2cDaEf;c(=mI3P*!J!$Ch>@i_`V+oZ# zE1dm8%wJ(SN)>-2@IxH(3{m`v3ey#Svfl80SK-F>@p^t<@sBB7g!s!Hd~Z|y^$M?2 z*jr(DgJCf~OdKCQ4?;hhSn1G3)oG~Dy~_*QX#M{eTimzAr zIO5~%Me#m`*CXE9ey>&hP=)6pKFd)Lrz`#_g2$fUk4=JqY6(`xPPs|KLJR(KWaFj@G`}pz83QmOII7dM=9L%DEuu4-!G7ca+L#;uTSAX#Xs<89LMU07_`4nSKu8$ ze=_t}tupZUD-9e7$n@uG_*4z=sWI^%)>t*YHDB_1SMkpQGTkzTcPf6mLjS|?`?Y*b zH|t@;&jrYIV;(ecJ>po7l`CR))d9E_iVp&kew@Oc%MJaz3d;c*@6zz&514Q!Ao&iu z-@r_T|N5;7uTuEXeI|UZ!tM$`y4T?UsqiU<4=KD)VX4Bt3R4umR%Oz!PJVD`AzqV@Js+XF(u_2xi-W)XY{88b93YRGSr9!vDPv#r?Un=aN z@LTX^{{L1uM`4k|;RT?h|$#CJ&ury<WaEBM_R<@vM1YK4;&p0DtSfT7!@Fr;v}!rltID(tLq zf2B!RuW*sVLWPxn6Mx1WtEN%wk9zqj!kLcn6yPXluEO&GSr4DzWnhECXB9rG@Ii%( z6jt74)zslP{vKLTj`>PLcs9aMI^t&~gv$`Fal}tY_+CeNGQ#s6;fV-uafEL~7`SNu zXW}=@b&SH#?=;~L6~3deTHz#x=PP^;WuPAZsL-qM?b(LUrGSk8%dZT)P~p>enDD=5 zVSPmP{NfDDdTN$Qw?yH5g;y#(R^hWV4c)y+L;1%m%vE@{!fiei|A4}v5B<2VQxCim zXN?tqoWf2Dx0ac7zg2jX!jly4DK+swQTR=X3I9`JK;bZj{Yv8VJx1|Q+-A}(ROp>< z!hIATukgER2LG_aTNIw9@Xe_v{(glwD?Co&yHiYjgTluYdKI3kaOY&JCQa*u`gv)x zNjF{L#R_@p3-$h|TQy!`zQS*BG58l0K6*=h`D+l~>!^p2(hX2}roz`J89vJt&YKj^ zXOiN-pJ?dLRe0~s@V6Z0*f7Dw&z=xpK6gSm6Je)Z4aM>K-CJz<3>qJgzhu0@p9OrA zqg)%tp}jlgcy}!N8Atr`gz&(GaL=)Z?}jl3K0L;%+3MgIM%c;!g&Pdrg9`6dSgPGw@EnpI#f!_cer_@|=|rUvN!)`iBaj4~Ja8MY!4_*Fwm~e2)fXzqD?&3IAGQ zk-{Ddr;jppnSe~UXQY8|D|}kv?*Ym03JssFFiqhXSDSR(07*An!$k@QDm+bL8X)N& z9bwWfP&h$hj>5AP?!U^=)hk@2uux%!!Y_v#x=$2NRk$bL;O|uU=GD@=Hy!e@t?aPd&9CZzsoH{h;Ud^#Y@_fDRn+oEuT!ubk^E9|Q9 z&qECTLkcSu&Q^H7!VW`VZz}Jv23yvD@#&2GJ_cmIn>1Xj@Xv#-nmM|DPx>2`?o5r( zQkbD|yT|Z*P~mumdvXnam%`T+)+@YNVT!`{2N`)@0Hl16D_l7!CeJM3G7&CSJ^pDR z&f6&6tN6`y8x-C#5c^X~HwL&8#rFjMD#f1wT(;sH2blCPE8M8?X@!4KI9Fkb!kZQ1 zdA*tomG92WE$d3fXDjTgFh${>9FyONIabX{j&$!T{x0B8aNuuI{M8Cm6n@>`@Y$|# zzQS^allo)*;^Y(ye-BZvv5N1c@Zrm?nin+NmDPQ7$qWJX}8@_h{l5d}j zh3^1I`V9*IqHrl7_4F$Z_fvSr1y;?S%CG17IBTf* z&+wak{-|(?!l1$lfaI62;r0rD=w;G%FX+TQr})_q4266kn(C5kT^*)G+TG zW&WcSUXqZ$hvJV{xDPx@->h)1!l??!^^EO9Ue_J{t>T9&?5!{}f$liP9|e4o%Fpy) zoM-ZT_dKiSQV0GG#s5~}T?*X_k5kwQ>Fj+`@=H^0X2^vMxm@8Vg1*F{AB7I;4_$@&Fz7!N z`kjE(H$dP|25Ee`zzTsA1x~*d>q2RV-@nAN#$BrQrwi;SuxWs%-zhLv;4A5xUMui^ z=r{xUrwU9KXaUl$KVPi*uLBZ)TJTK*?-RO5@M?iK3w?m#=L`PnMOxoMf%^nLC-7lF z<}>!9=zh{txi+d^*^_>#b<1QrXND6p5nf1e*M&%@_qUl|AO+$*rxdFaPw9^HH{zCqW|3e`(I zS^X^Q<5cbcM**4cVS%d!E=@)I5IalG!F>lpF9Ch8K_4e{7wE4T^!`FW3-sp=`pIwU z{Mx=1y}m{L2ZjDR=#LrlTZO(!;Qazi1>Pv|YJq(P{t-G^u6NF{LO(I|9X?yre|vT` zekwtGN9Zk}FBf^zpP-z9-whh$HZ#Qv-J8Pciq+WR#Pess7Z~_J;N=FM0sJ-tPX|8D z!21Jt8+aPKjMFOuo3)gK#&mWSpA1Cyl0>1=J=@Ym~;62IM-;#76pJ`ds zgnom-O9g&Q;28q{4O!}YMxaMvwZPlX#6G6z{bwJ`8Y%Pv0?!k8rodg0p}rLY?-f|p z2iJ{6PY=-YgnqTa%LSe<@GU5zp3oV%E-UH!fv{ZYO9d7Q%oR9F;9!9plC+-hC0U_T zi9Z);)k2>k5YK~#CP_Ze^g_lxb-ED_9j7UPP}!5uJrn+;ho-*@Nc>5`9~S(^9?^Eu z2eipTzeeETPW*JC<2mwBq1efE*@;?z2O108%TxGael-c!Ppx(xx5=Q56FQc1G4#C< zq5RJ+#J%XfAG99|y#|naiv^!7@LGYx1r8L5VMFOd*Qel+t5kZ&hCv!S1lA$}^g0e* zso^An+pf@fy1+G;Yy4z}h7|%2T&D4{0ykrvroL2x^#e41G+o0P0-Niszp1^}?8XqTc%Xu146WD+;g7U}UAi|jf z_n{vro-L65F!5x8e7=GB5#293iUjUN-$Xk4K?T__5w`?Zqn{!E9{LBuJb_!$zKQo2 zxEk$~_;Iu^!dU|MBRGiX2;{S~#8U(=>#gxtv}{z5pEl z46Ozvo`UPo1;FJ!@QpJ;p9Fk{!S4_J?RO|{H4Xti4fsHVe+=W7d;_4-0{tlPQzN4K zn}N&w_!|#`j^}Jb2MqoO;8(q^^=}3p&+LRk2EQ7(d;_I%8R&TaC$z-ij{`2>5N|93 z9nTVl3JiWKaQR+IV+QCcz|#%>5sY&`-KXcj^__U z`wadX;QN0p_JNM)8ABTkelhUBZ`Aw>(D9sPXqLer3Ve*z$2Fj50N?a|EuRe>&tZl# z4f*4kSG3xi?*JXob%rd1-wb^1D$PHLH&)^~(a-@v{HgM+1D;Z^`61Bp+-Yc&!Ji3S z-d)^S4LasEp?L;>2=IbsI{jGC@qBD3$KapB{N<&4G(Q>ilfaV<{(j)YN;UrwUaEuV zcSG+1;!oMP5%>iqn!g3~4Zt@W{A%F!(=>k>=y<+3w8Y?#1wQiz%`X5w2lym|p8{Oo ziQbqFI-Y$F^*8v3F;9|r@HZaAivjQ~b?7Kx5Fqxw2>ei*#@_&aEAWbZonI4hJgXhr zX~+kF*NOZOL9YjX?F22q7C4>-53Moe3xGc~Uh`*yj_1omGYoz@aQU8gV(2e`aUt|99gK&^gcCX7Fo)%XdZ_>p{o67(&YoKE}(CywkjK66koxLnzPS zCjpml&o`!l?f{-@@ZZCHRK8Kv*g6FE0Y3s5w(nWsXNkXegT5K~^O zY-e;M$jm}^pg4d_dNuQvE4 zz<(_DQ3-kh@I1^xDL)f9-cJ;oVaR6yFF04{pAC9C@Jxe$+=238&dT%-(DB}+kY(_j zfy?)=8V?RcyZ}D{NO|RN;Mt;o3+R|nhBg~~FYtw8uOIYk;PSoX#$~|qzNpX=L*5O1 zqR5wkJ{I^M%!Qd>0q`8)lMMNO!265*<)9}6KY%$i<@*E2x-XPw$bX1++NWagKd(f8 z4_v-a(RdU%-lr961!Q`bZ#(e4BL6z*TYw+MoSXce!12DW&<;c15Bw34Uk~~+;PP#y z#x=n4KCsYgL%sm`6_~SA-%QZ)ezDLDgWn%G+LYoC0iEm2fd;=d5%U+!?eW)m5-+X5 zJJ3SM`SJ>}e+O{10fp}aeH-v*gTETMdR+EN@efzxgdMc3iT!*MGPHpK!Q z6L4IQqXnAZ~=~d9Jk{@%ve=8=Ho!TSe%aBjf30AytF$5$0Qu= z7U$u(7RQY^DskL~V-}7w9CzWEel_+G9q`T_jIs2iX$T|D4t#Z!( zZ;za_?>s2y?Ds#CbB@U;<(%^kTnAJ6a;|rgoO2$UDd(KSPLOl1Kc>q$*M?Pc&UN`R zo})ivZ2t-UoD*eY``Ckh5+~@%sPvc6ACt~;b`Zv5(nF|>TA_3N`~!HT=YhUn=p1(w zMBW2B_cW=8*9_PUh=F5GOzlxvt!_Ti`94DRgiSJ3AHz3Y) z#Si@EUXx+}QK=X1{XJsPUxeM%vki4sY}D5zDKF>uA4qxEp}bqAyc~xwlJahZ|My6F zxxSw)oNSCBXrJ3d#m<~aTe`2B=y2|z>U%_wz2;aI`*in zs}1}ATkPk))Nrw<8F6Akj`hg({3K~F`_W$JNWF01X-W#Z;3w-!=JsSyj+jnD)H$-d{&~K=!cYg#H-}H z5&C~3e&+i80qGwc=pU{VKQBX?i;VK}9l6xQ_1iGfp9lRYvZ8aJ<%HOi0zY3N`EtMU zxdFOd*~s_z5)a%b*(mb$upeqHC-UI+w023$z0yr$^C_f#Nz!r;WtpTcLfZM#_D>;s zZ^Pynq^{F34*%1L)my~3{4RWzA%C%yk=Gc0CNX&uKL3-{X$U?(&*&3A6nnTQ^px1M z754m>)HV0!>!t42AeQbIdp<**PdDt@DCOne?-VKTew6nMv6E}MW{K6ch}A_x=Qre6 z8umXXvB7H~tHu8Pu>S$EpL?Ta>AEgjQE^WQoqI+Ov40<8;MWoZ+)Mta)LjMaxmse3 z*94qWu9N6X>&5?En|&;O?^yJ`sd#c*lnHIjcb*BmQiH&mJ}O3==x{@ZOa+UI9Np z#yIRzZ*ec_Z>n7N))0(YQ_yFrIch)5XH-4bTbY;}R|=hL*=a(b0s6f{=bHE~p|1x0 zVWD#^Z3}%X=$i&}Ne)Ng?=0hd!LTU3wkWTgFzk@jWdJj;;Zi~cLD|9V5`nTDQKMtN5l zX}yL$V~n(S8s&Pxkon9=`wH4%INuyY=HEuX4;niEV8|RZ(mrjRk2A{hjFI*XqwLQZ zw&fe=n~i+`Zs;j9&es`w`WWLVP@FTBT<4aJ})Hlhx(c!-F zv?5uVHMQd_=Tt7?rS3DWGKoubmpFE4lN2NhW0lr-}p{zEJ0INTe$%MjNZcrYN zBk0oB6jtFQS_M_}tGaPGzHo-m3s%Nc0AEFNnmTcOcNxL)-N!S$717b10yeK$p(*jq zLGxn0O~FC;#1k2=MWn69lb}=3KGmlnPZI?&hunfn^^M4QigdyFZVm)7D5p{}Tg z_QYXp|MEMPahMGE({(nwc9nMZsk(S7qB2wQrLoF|@nqmKDeTm$Me(e3>5|@Dv#{bc zCDm0psb*o-z0=C^fxo!^fTju6Rq>*ljrYcGcnpsT{379LyG0kgsieN9`=l5@npj*D z#~UyM{b_kw+zOHELfb!WC#S{o$`;LwlYt9C40khZ)F<=eiAZFX;VXxEmG@MY$Ey_O zukN}bU8Ur9*9mDW+~F^u#fpJP|d6bBk9{r3o2vW|!C0E_LfERD?K6ebf~7TA}`8Q;aTWPoQd6 z>vCm5S>!XFd0CQ0C$cLp*_BycQ*)QMR(HYWDks-S=!=;}Ovn-oN1k(%3g$^RbInS`CU>V&8n!uw`AF=Ou#ox(Rq!+ z7md}|Kf^QH(UHVvx~zqI@K;(*#we4avnz_!k9Jdx+g&-@klVEvaDKmj`BHN!|jnkr&LU6yN1_#7tM>N(Y{xX zr|jrC=#fy;a*QtwE_I4`SA=8MHL9XU(F!XU%?tNmuF+vhP1WD<4ksCj?xviLNfu|* zT%}QcS#xWowKDfn6;+FBtK-knN6z+ERqK@o+EKLMVme0B$fCUbyqfZ&(KmWMwO$WL zX}mhEI^x7(&5yrL#|NmW^OBo;;>H=)GFfh)VBW-3UA zEPLTFsgv;Nx%kF&nYV%?Wbwi(J^GtQS5zR7)Q=IKSukg!P8d!UHY|&Vb>YS4nw42m zBQ023yB?rjqmVY1QDx+sQ?amYF~3P1iE*j2ifP%URaHeU6%deNVYn~|#dOwU9o-m1H;r?_B~lo*wlYR9Rod{@NtfZtH6oHw=0Zl&s8VHv5kWbT zRBB1hPe@1IGEz5P*cVNKn2p^(C<;qO3rcBkd;3VqX(v}0diN{dZjPym3tY^%CV!n=mvw`w z1m<9%i`_}-#OHb^X1!$cPqSMSBi7w=J&sV<L}nsjZlpjh+|@R9sjBfe`7Y zVq+Hmrcl={E>o4+KQMEe_CK6Wm}=vz`PvCVSVh;RUYHYEILKj7F#h=@prmS5pzjq(p{ZaWihXQQmgDfceT+FGs}uyDw`^`#@Ow~uKd_d z<}kn0N;*uAt*Nd{=dhfr90a-=X4!9b)2l_thr&)<)nQGsIffUwU6a(Mc3Nh$aS~e?neAHEADU#dY7?vx@&!=tgF)k-Q=15qi$01R_103G^ftHt0udf zwYw?u&6n?Hs(34Sldl%>CZX#(-sJMCK)73oEQ;cX>DOMyjM1yRMRp>cu4=_d>26Us z_tVLBzlR&6?sV75OhFX7%QX&@&udFv_k6pN;68&~>W-0!e}N!IB+foc3?C}uTnmj6 zfu)?A&o7&6Y{@v z_n++B#H5SvvZ#?fvQMCfi@3WtG0EA3#lNl|BZeMKF3xwowjCpg{#6NfxtAtJ3cbVE z=;^w#6r-TKD{!U|Bcs#(IwsrL^wRrNG0bneMP(-HewWIWa&>cik12zJATo)H+lh0e z;03k#7tKvoymI{wq)vCOK1Lm^r@Kz)S@!JeUa0u}IR;nd@c6^i|6&_2#!fxZ$GKE) zN`3SFKAoy`?vf>?wUrAO)hxih5}u`{_he$buXItqRXVr2W_B4ai!3agzesHXMwZVb z7h#1}Txebv9SONbl?x+RU8Ih)=PazOm`!=*wu+i zp-0rxo&HkCjvkkq6=&8iB^Y9lU)*c@Ie z%cUwQD7SfFY9#-vqIs_D2@99jdUC7h;_emCy!nwGW0wnNbLGTKhEYR?M=m2OTTZjt z?{Xox@WlalmGW716J8vcC2pLSr7sX^XAG~XtPWpWHqFrGTvW9{H1R_T4iNsTz}M&r7AGya*SbN)J3L&IaLd)R87c5TE*kV5?pbZH$vSOAUQ|8GTMVh z>9l!Ob3AA?O5WA^l2P~BMzpxHRmhI7MsOC^R77JJ*ZPosgszQ6+rkAyS7uoSuP5O$ z_o7IwDS@b37uqwYfqLy;QKc=6^4Z>X_bAs?aD9voNw8RLBNmy(RK6b$6AZ_rH&Fcm zE?Ac1PJ!6uuFP_@?BW_;xKtes*&`|!F05JT8tx{TQ0A#b16f*CRDQ2Yt6E3S_$m)u zh>9L=65$Sjazwh>SfeEx9VwBDMRgM%3dJc#l%SN4$X$s0Cx;_yW0aLFSd6!mw>`HSKX-;ha+nwZdl+=MiM~L{IVs# z?klHjFNN$PzKL7zi27{SN9TBUF=UDtmMvH`hd1*@FF`4bv*<^C#~633qJGd#vMk(b z7;=$&uT)h;nr>{>W}z0M7x8uDj@UW6T-`6%Xq)8xk}F~gmZ8Y1RBNs%K7EBOO0U?NSnH|cm)(ooq+s~w>njJt?9Bbi*F z?}Lw+;u@*Dib&U_Oe(Les*W`oj>c^^Ro27_6G|(WlvmbzNt1C0RP+VOoSzRc@ zyHK*bP)2m2jO;=g)rFGNg)+Je#TCcsu2#Fcn(gXpx2vn+t`U}dQt2E_`6^v_q@fS~ zE^}R-m6;y>b7hSfm6bg@Cueke`iM*y7@F$cO;%c3?4D5^ z#d-GF4LUs@eY0BU;F(~aIIMd7s=rc9NEa-MDk&|^%Pr0gbMY<&q{pM0)_XT+aSwF- z0){^U9o_wvmSRm&xv;D{M@w|JW8iIgcM4cDO0`eJdT2}duWP-;*6l3lNQdxR=rGfT z(-W4KR?gE=t*M>usE3ZNaOPI%U|np6Kh^-AiB~h|6x4C2cYdwzIY=ulom^OSptJn2Kp$XB`jD#yc#)dJXYu{`CSfQ3&FXh2C;p z;|HyCSzdq+{(am@ho1>X8F znb{ewJ7xji=dj%=c1da=KPfOh*>Q32pNinu9b_9Kgu1Aqh1bTZ?nA2U7<3)h>;#B_$ProsXQ#9{J;Uy?u3V13> zj*$O4i%HVMWR`;(f1}7lK)!%zA11#2c)*(kBVpI)NES&M%(1CwL2rm?&qL{ z>MK=lv35T!yvd3evAbT#S&AI7yGqCxDl+X>rJO2c2Vq@O)Zn(y(4v)x(*j(QNp!cNn`AplL8o*EgfCrJ8m%(^Y+E#5uFF-w?-2u0jqz4jhcgAPV zl!njoW<2XN=h>F+&Ya`Cxk;Z6(O{qgw;$h;U?G(R5Nl#OS_R5vuMDeAgLxW56SzY~ z+0E0Z=>q$X7PKIQ*+n9}*{oZSz>0voN$V|XYROx13S4X4H3{H)|K{pwaqmY}1MJhF znV`MIE=&$AL&=geT5G6+=X>b|lqz_IWQsMP2BB*ST)b z6cYA$dIswDwI?^c=|TJ3-`*oo*F4cKNe-kUB9VS{%d(AjVUoRk6TISY^4x8^_t`Io zfP8)+uxIyQFY$Mvl{f71=GnRZcef_`4kvhe+jnR9Pb^Kf3!7aXaEkv8XW$noOhc3B z0=sTMQUrFRR6x(Pz5DzpoPn2!zU#RP!mr|#j>E6N$(zxBi(R;%3cd%rU9u0B2iD-U z#eD!0R@+LPvpcYTv*>VDqgTUjn0l3}=MvQTK9q(+tv7*V7d8d*UOd%)rtOBCcbuXh zC;Ij}mUk#uH?+ND7~r|Ev+^|sa)3lD-4wr~OLpoM<{jf31Bz&RqIQ`H?$+a~B1kFI4+ zx|-0B_OQn%Yfne|q)plfed&XG+Ov|BNWa7yiKb7qQBlx(^K{n<-_aDrjorKb96NO@ zboa3n5h5K$4!d{$n8l7|Z2@%Z-F5-2R9@RHUW=xOWZfXUx9!-9ia3{{#!h^k znkcl+P}S2Tzx@wNqCL@t;Gsrs17;gTV4vE^y?g{WnV&Hdy-?zAru+h}N zvXPxB;y4`9Dmqp|c|Jn8qwt9L5K=~)W;Q*qwDsJKm5c8s{`SV01P|SSRKnY)c>L|{ zy@b50!E5iw9`-QNw?5ZZG>%D14hKr$jUf#Dwr9c7BlL)fKjN0<@$uiREHB;MU0LQu z?d?*Q`;n@kZY4eLIxXf@=x9J?!fp zZv^(e7Ue3p1=kWpxr{6LVJ3Qdbm3rGG6%@du%{1faUVJZBzCC)7!VH!-3J2hZQ*{f zmFJZiw3|b?Y3Q zw&Z6hLHAB(*2Wb8ue99R*>YQNXbeJ48tE#6(2zGBJ}A*a}I z0IYuw6CtsFGf&++ea$n&y{s{};J9ShB?o=Cu!BOb_V^*v+BPC@3>|yD*_0VS#PAi{ z4}_8IcAYG#^#pQZ1H)h22K+!eDN#d8t1kB#XJ_c7Zepo=Q-U1oRTAL5O}(hTER4egDgyL z^)O>BGTa9-b9`tMl%RhcYOf4YU15KS`kN3fkWaP?)0}Q7DZm(wQn%J)p&IDj-b?cC zO~L+{kYT~}Xj8)hPloL~PVLIUy>W(alM5Q?L8K(K^rqkR6v-Z!j8y&=Bz(6SznH;( zcQYWSOyBJRIs5r0^6Cz@xM`Uc@HUURcG1wbk4bfhY;QAo3H#JkE@98FzX%-Ieb|8( zH)d?+!k&SWP98=_Qu4;r9DQly93x8x}MLly{z?%?K)2G&%<;d08TmVYhI?BRb*a| zw&G5q6Iv(z8(t_oAQEU{ zdwK>ecK#_qI;JMK573L{J1KyMX@l*2rHSTpda*J_nthS?&(YNAgbq^YFi2qq(T}Zx zYmMv-n%#N;m7f}iTv-|Jl(0hsB^xmLP{aI3 zMRa9vr+-*4_WNf>9DO)gcpxHQxKTA*l>B)mpWrBVBSK7(w6JNN<;H z)cGBbq?gQ=GI8AjhxanudoWy6w}PmarK+}W0)~}VU}?Htw~@|z4ZE8`-vv>-;BaO6 zuc<8O4DYP)OmPDhp+;Xs3NF@QV99&FrD+L)+>F3Y13jaHzRR^5b9AJiTF+swoZ=zJ zj-n(i6whz+9sa`C)H^USO$zvJs>Rgi-i!|K;-K$lmK1(bo;@6P&sZ^Px^@o?2u#ed zC#D5%9*Bj!bNwFQ$v#{u9`Iy$Z%qSpiZ$g+UsIo`DbJu|5mTK0A0QBdzOuOHJOxeg zk<&jPLTEg}x@Oc)q+04WDQ7bDQ!`o@Ln~U9(?3E9?+ZS+luC8G85=Cz5q$725F)7y z*Qrv=Ue}MAx^9QV>3<^usp@tHeTyLdBErf#)#Bbp7^rIqd=+T<#}n)UEl(fk^Z6al z=Wpy7w2$5Q9_+KnsW)fCkD#!7Z%wB&;?`aJ4Auf70kx2uVdthH3MQd$7bmymrm^|7 zjXSO8Q-$4VM%bsdaoje|?Wx1e+0YKn-JAQfxJp^S?N6HOdW$;$OwQtR@u3OWyB0rP z%fv0BGay12x7Tv_C>aiEnTVIwgHY-_*&76ODdW;Ot!$ry7zCjtsbzfHnIv4(t+nkJ z1$}j>MKxbx$Ba->J&nvN|EqvLSjT;r3werwLX%D5sqPhe;xy>n1Qp%)3gr|pIS?G* z!MeHNdT;N~oL9LIw)e!yrRom@((-y3Dm}upH&EwOG)p(WNJL7{a88WEVVx9y=DfxC zK6V4=IEVRu3wUoLHelQsE6=W9%}mgHp)nMwOt#VRNF$Hr!zm29yq`lRYWR)a=5zBK z$ZNOCr;hoo($&b}xt^!w-jjkM+1C>qX^0Xi+34z^DZ620(6{rnrd&c(yh*;CUf$c= zhx_W96SNoiX)o>z7aGd*XW8ye*lAHksDy4`hXb=s_rWnslIzlgCC!17O=@)Dz=l#j z3=!K>?PhQL=E^PLyf!pFUZAbvN|usWRLw>m{%h_<*l6Lgc}@oe zwMZ#5mE}j*VE%$BYAcdix7j7!K*f9@6~5vG8RJcgjz{I#0j($(cE)^1hofAWQztFo z!%0$Lea4q)&&zp^e^%P^-CP_7f&rM*Ps`=F4 zSeBk`9#kX)aRZrL(4}CdaJ_9mgTO=!3hv+@*V{HW==7v?JV&%vug>@!Tk-vG1cGaj zskg5E0wtgdt3bE&_k#!wQyRw8ps^{u{kZ_Pi@P}HH!B4>xj-%?W|>` zYTb})S-DPefA^|gm%&*yOkrmwBkvdgM69h~2FeKZ3-(xS?jSqotGVbVu4+R2-3^^8 zW6=7TG-d)?vO&wA1wvnwFb@PQ1tOaAYe6{2BrIv0g|3|=>CG9~Utaw)gpECMAf|zV z63nEq#6Q3m6X^uq?**}(_aCQs5oFxW3IvZ4L;o;1pR<8xOeTt`2D{}l{pL0_N*(m& zpngfU})d)Y| zlC++l?{uG}8A(vX7+%q1SnW5V@nag=!!xP-B;RKeYzF1)G5g}6FYnv&i!qmyyOh@v z^N;5tgEP22VT!dJ@8DhCh;B&UrQ%6+xzPt%)xSKc$p*=BtnQ7t- zVnzHJ$DbTq7p){C5_+iJpl^8N! zvUjO^P}7sB*)ly@gf!Y%T;(gl#i79Zrmr^^!*-BjY+cWc$JKX?;2gPW?C2%Q_rX}j z)}yvE_I-$%#x4PFZ|C@f&0|_w7qyK&kq509weuT@VM*w@0^!;<2-$vGKY$3AT31k` ze;_p4ovY_Lqk5K$#=f>1VG`c8(8EIAmo#mLmKk?$zu0_&Bfzw5@xJ^z=DEf*O?C7#envD zC5s+%lhW27DZ_J*1J{8cBn4YUXzBjVQ{4NT5ZR9}KIF zV~p=)qSN2{6&eNtC6~@hv2WtI8d!;$YTMi7=xaY?ncPoD8EzO9c7wCwF^a+!+as<( zQEDTJY?YLq{8PwVW9-n5V{WHhfr?ugam7nahxFBec95B}G46wGz@Kio;&oE?+KL8w z)?Mwt72y`vex4q9d$KL6#@5Sz`B5}F zcGxYB7XLC>!U_v)ug94^@l-%vaCbhxo}p|9NnQPYUQ?^zrGnej4<0?6f^hI?Sfmql zC{0j_OT`_2rdqyB>4tLeW<5M4dT+Ax83w)WeAv8Xf~{0yYj8A!)uvs6J;4_(Q9s-?ClUWjrgO@VzV4)ji*Chp)*oe)PY*?_nzq{U4((=sRNce|6FRPfrwN;Q3;# z>i>E<{l8141=csC_fyw^>>y9o#++&jNv+>Sa@)Ow`wKm>ztg@H zy_7d^xvI^@EJgj!-ueQh({9+oBG64qD%DP&_U0+}_8ML!b8mx_(g_pWF$}A`Ao3qa!ePf%a+4jDp6)~ZT$Ec4BMDIVz_p$;axy>P<5sV>IcBGx2tg&@w1GW>TFPj zeeGS0H`!xzgqslP>lvMq%e!d0&ppUa+}{8)Y{prhoCShQaMt4Y;8zFHKKRStMXLQO z3+V3%>{<)V+3)}a><1rX74z1JL^|VoWgb%pgB$RR1|K|1kLNvm%IP1?6x*3P`0^k~ zzL*4srvkgSLLz>L-_VOmf=t3Dy%33fCwqA7w3e4R<~U#J)q33@n3ZRa^Z6+W&R2F{ z!%{7tVZY2`p2%A@GQo3$?N?SmUz-^C%=yY5EiytghXr#V9osXQ`>OMyJ!5-1A8Jb4 zSDaHneaA^(+2*{`y*> zz7{NdJZ@)k`hNy~@VQ9P1U|R7GvTRj!e$B81u4O>8H2@>^Z8v2_ZIhIZuJGeKo|w~ z@-C?Zo<&+xqA8*E)8DCRnyJb5dS&4&xe4QS(Bx^KoXA^_xEiH}oUi02YVH*#_k4Rh zU1aZ4&f!cHEv0QY{O9{BG4O@X{)VuM1g&9=y^CIy(1d28U#2PjZRK`bJ3N`Am|CW` z&4*fB6%vE`x;?(H67(gSh!r{3fnu$|WlHj&BAF4T+|8E5N zVoBb`7nj((Sj#%mIZ-e4Rupe;F#i;jPwwQ(MBg59*VXne28dR0DHQb3PB>3fcv-gf zj#21h+=tt~&#?Ong98_Hwx88fpX2q`)h|g{;9Xq5B(chSH?H6BcD^#Mhi{K4Dz&#W z_D5EeXF!=@p!Cudc$}2}_AXV6epQRc4oB@s*x^2W4SUhW zN%nfiYap>hwGp2RW{1zu)`9k_+6`*R>HiYjZ|&*mu27R~Wv+K^+(ze345W<57`Xfk zc52?Ew(d6(y}xHJxP3)!j$w7fk%Svy>^wP(K}fYW`~^{#k1Zl+!{;P(jpkELTMbuv zP{Fy^B-r9?_$?%MAQOx@%)it9h<~Na%aI`9FMzn~M6hlH#y2iLRE{h^){ge_@U3vc z5mbKPb+&s$j1X;5IkIz^r-d%C*HbBrptg#*2xSd}%NyEQ@(1l8&1Ad16J*YZUSL+? zn@|^l$SKahEB$)`GRzV5+Z2L9ybl=dGW217;)%fn&}*TqVU#0{(Tdt~C*Syq+LKo-nxW7`@3|_4P-Pb^B5~NC-uY#_(ms;i?qPatUODTuCrC z@0Go4npn{ogXC6L&lr0>73z&n|{>`w5e1ort3Ct`Yf{=2>pPWkpEeZHFyU&#?T1@?-}u_kW@Ui(S808PITx7^&^6i5vE?j3-l z%dIW?uD?za@k@0Jkn;htO#FrXj!pVxGgKf z7aLmCjXEG(SQQiCuVqCDzYLz16`M)GU&{(!zO$@j*R`zJs?JE;rfILXtl;JPK{LO% zr)34__x~Jt6mm_9OS$IA*}llx{>a&Z$l1a08HO~T27=jKuzAx}FUT$*W7YIwXr(#5 zJVS!MHE7UM(AMdwP0*t?h(Vcs_XZ1@;=4*4@lfH=BVrcgN`p7{kQ?q;5eOQ=xT zwwCkV^(r-b`ATr@!o%1!+8n9SiwWnVQS*H2r)u9g3ld9 zVs8a*m zvLnRkjpDafzyN(2=Z7>ba*;+oO#p$QZ!BV+-G&#w>2w*V_u})_+$r$sZw_xx_72&c z>7BC~3zUbTD(IV(-lcXyw^~=R%)?+juIVIsE)V+Z;oMGPpak!LAg-5S?t*AghNIJ4 zKNzX!aVH3ym92d+7~Jzg_bM)g3hj60-5omDGd$09pQIHTAXi=qYhN9S!q$sGmj3q= zJfUK*XT1b{1*oh@JcS1sgk3Gf8I+gd8Z7HGPL$sdk+!ASD-8M`)*`rr>mV*}MDzt! zq2*qLiy@91EeuKTj)>&;fvi_XF>31gRjN*Vc>CaXogU7H8&n=!x-sJp^)$-Y-J|yN%XNXI$ z0GPx+T4_X<2Y;{jMpkVC&FQ!C8}xk)V_R0SALAb*)mC}3ct3_l%uUiU;Z;>|LR`Yh z^K!*=`tL#sS|6cV7#Wvuf{ykPsC&%&R}%3Kw0G&m)@4e4=Pn3MB)RpEG@XH_))H?c zoifDtvrN#HV@|5<0xix4cB;q=&kx~*OApls{2o|{YgPXKfb9$H^@Q{TV_H0_F65Lb zMfYL(O9@-0i^$<3eE62yp<3=T7{W`;woO6c+no-pbw^7Vn5r07 z2hFvE^fW@DeVp$1wCk}Y4-@DFwGq(zuPY&1!WvRTn)f0s+#7C#HX8mR@*sQ|uq~fi zMB>ZObSgFw6X)97Rc6_k95D%C1{xY)AF7~vcaQXCoM09wytZmT#FaseS%!e1q;y#V!)z)Htcxe(&^;BpGm zy?u3|11nU@!ld0FCH2@|M9Y>lr@)(bK#68A9~W3bN>sbLiGHuMVO1_$HV)h~nA@%toCUTg<2UZS%Y%#772QO^ zFRy^+NTnRR9GDtwgT4ol!rsN+(r|R-QsgA0^W`LXaStXIJh&;0OM)2)8%%!cH?wS! zk^B)VRapdmK`PzeMJbyJ>ii#&Z1K-PmQaARVmZUK!|8uN5izs@KYC2D*HaFap+?1G z42k?oFD_$(3U8~nB|UHr7`)8v^bdx=^hUYU&xhi)5{P3jXG~GDGuQ_LLGKn7-O$Op zc2TXm%gVXx2^I`NsVp0_su`$vkgq8vpa_hW6p&PJv#N<_NdE!aOF&_4_-amOKR_lP zOXI!lsYz_`B|GiqR2O*14vw95H2CVa$n9fW_3dL@4Y!ZuV!ETATG~}?MEKW&R&|a4G zBrBKwHVITww=d}4!frGjmD0AA)b%`7m4jVBEHGQ&Wg>kO+iW^QdBOfZRnP}xQ#wg&BS@$234B<;}FrDn8p97756$J~vp7ZYK!_Ee&dFOH9|Q)0UsJK@Y1 z6vl`|Fy*Uj9wodahMOLISqD*K^v~h&&~+LcByTZy)wj`+Rn(^151un5M@@EPnju_A zD|SOtwT_qQT*UE`WL({RiioleX&gXUJ&ftr3ToEgzP#(57ckd|r&U~B*nU++7*Da&o@S>r00kEKN8w#x)q-N2Pg3I8xA2PTl z4$fxLu$due$`K)yx2+UEVr!6cEIuveb>lLXpV>`_+DTyOZenOpBv;qdoc=#0&^#)^ zLnXM9IObk-6Uh`%7KA&C)C^x!B28{hpnmP*8-nglprOBDdS6oyRVH*!aOZ!eN5nFM z?sWnG5ZXy$*?@w~^AVYQu#0Fs0Y^L9MX!u`aX&od9pY
DNNKUkf1)d0XAM6xAn$g_kpHU)?$p-k^my zgoV=(z#ZC1?M{^KA}mr^4LCiA>lHNCK7c+|B|Y2DPsBNUzR^8c^qntFFDWUp?@kUJ z`~0uFzq(}5XP9;Mc!>FrUQdtKUG3ZB^nGwFps_sX&m!8b}^vB!kyqIc7kJB z!MkSRH(0l&Z7t$T4PBg{qb0wIM3Jz`Pr&s~imTb(&TuPxA}VubFkgk6?cN#0ZQel@ zJu=?i9}zoU*zAB*B=FjP58GKULE5Kl$NoXM>XY$wS2wHz^u}?jv-2<&ln6*UBV1Si zFQWj%pr7UFsAt95s$pN@@8R(MM@8VNNegc0ME&Ih zZ9j|qxf>Ko#dTX!CSD|uB~-!SwkRIx#v0~l66o$5;tFe0HIq8##5`CuvaL3bK;OICTv z828$9q=k!HZ>Rc6NYnmkSY7WJb)1@fb9H^G?q4WjTOlGPta1DKrhyoj{{xLX-(mTw z@k_)eG`@%At>qDor?m|$pJ-7Rv_aGD)buPg;iex379S;M)FA+1F!i%~TCaotu=Ss( znbw2*A6WktHu&1wkfiMz6Oj=OBcW!SK6 zZ!Bw6WOgrmf!OeJ8uelsbsD|n!m?+bUN7uqi+>8@ZM;K-tqJjY{ds7q&C6n+()1mz zMpWu{k2yoQsq5W*ymBIt>tIEwkV6wrRgT9k$%nB2?>^AtZi2at6=;H@J1VUoxjOe$c2U9uU^U)%02(25ePii-&BJ(qn6?*VHB2ffM}xMK|OcPKm( z_emHe+W_S1!PCML9K6kU43luhu zx!&Pivj-LCYpyo>=V_o&1FvdZ83h^+1?2nkNE;*Plp*cAsDKSP;{9y}KNDg0ZHAis zZDju>e>=hdYcI<>j)Q;e5b8fgDfyO9zG%>jd0(idUQ#<@a-L%4;(LnK)}+endn!Fu zU1%RBLJoLyaYx3^LhbPm5ak!g&{~WxrXsrMWlA2#25$( z!v}`;p=bf#$yov1(~_1~%H6)M?AWjYfKBchtZ)=pbGe|Al^)~nAg zgCweiB3NXL2{HG`Xvqcof6QQR54XyLdN-Dftfb;4Q$z zYUh;kXEuHoS(bXYb46uE`W$pj>2s>8E7PkMrQ<`K>1FA7_aa`+-JOi5rY60*Y~kEW zYvF9jEa4Zb%c>1MSAHk++n%~B)9)!;P_<}YWrd~Qi=7Ug6?pe(I$nj^O$w{Hrer}? zIbI!Zu}{paTvWcWs+RAO#P=ZQE>c9kbzPm{71ovLV+*Sm&F80)(`Q$D7FSj-&~|w6 ze)e>{c|E<7udt3OW+ZV|SKP{Qj{va zY60FzjF+BMrT#9M6@Gy@>QRhHuUQxtOpkEWEAT#kzTJ4?QZUn*QTlM@AS?2oYRkO< z4(B^z$Cu%A17W1FtX#G92qCX(4&J3*xuCpqk#+OJ8q}kQ>Y!Ey5Ex1eYFU5z8hJ+& zqz_ac8)OYbd{tD=u`XX?}$uOe#ifblL&clZ)tVm{-VRx7tO^zhGLi296Zq{|WxT?Z4Z&7*~UyUCLe5ug9 zo3kwZtGXAtfj4IjiZ2Y^Y;~-=EY&`UMT)EfpB4CRRZ!I>6jIiuTK#bKn~Ab3!AQf1 zbhFXcNe6ZFHwp98DL7`};JXnP;_%`4A&w_-?7%_#YdAmvL-L5zP8U6GKDlQ6-0639LrPhcT#@i8279%VwV_)1V)igOCJK+f5? z0&ZP`pFaR9PVX}{N4+T}6UZGXzv4U(m63ej0fH_@b6`exj1{%WYcuZgx`-7x6hD!4 zV}R6xs5nUXS^{fw01ow6j$g{&Nz8}iZl3UOFjSH=0#JDZ>h)i^lM!BmqJpVb!m^~^kMQ05DJjW49jj3) z#uOXJj8I3%SU?A*)pf+aNezi=Z{{qA0=^zYz+w{~cM7k+rPvQ~5|w4qAj_~_=~#s_ zQg1zu84yFB@pXevxy?9ozJc5U$fZG!vDe8~W^op2jEa*u-hQm3V-29Ae>^+63E}JM zKrq8x2Qk{rw0v-NApG$Z&O7BHWz^CtQACAK%jgXu?a%+iw3(3Kg0$y6-qCUEY16Lk zq4RZEY&M6HCI@N0(`}k$a8~tznKXJO%fmY7zVR}o%fNa3GLpJd)p;IdJ&-*C7+)5S zgD+X@^q&WEw{Gs}*g)NHVc)Auj2OOOrHezun071DHX-dMrhV$0r)8OrBJJ2GJ34qC z-_B^6`09u$kR92rER;zcGwvrr{tn3JeM9*rkY5P--IVXqeL3he>fa3czCZ8i*iZRS z@!H;Qd={2}5Aq*Demd$uep$7T!}7diDtQaqO}Fw;D0N7Cav=W^oXq5Eus8Gib|Y@yZ%&OEct?wsv$piWcs;`0M45Lw?B%cytB3 z`i}GC$+OYxcx72L(3|J|8dthfAz%CT^2LxJ@?l5Er!dp8B%XY%{SA=+duvC>W8L~b zT35&a|KI;>51_`s{x1;&4E}rePttHLVvqQ>h-Sk3P?v;{Vow{VJr@HKuNF8};J0tE zLK&PzVnWdSdd!tY{!cikd_dqlfrABpJX!Ofoot2rOL}KMt`Y#ha;nxx{1)Kn8vLQa z(+z$C@V*BB?~}B>zXW9dPY8Tqk`?*~8!zmn-g`wZU-+4VAD^hx{SlDm{;A;K6MUNB z69rx;FjM%)p_}=>ns0^PzA2jD7NLI^^t}dswb1K9KWNbB3H=s<*9de$?yp8UI^0rT zw-tI{=$w2$2s-Wf4(K}!`kg|b3i?`uK2hk`fc~@D+HUF@DD(>io&!j~aFIa$pXF(I zL}0VP=LK#S*pO$1#`lWqohS5L1&$OrOdwz4L;V{kSfLrWMbizPpy~ZUH_O#q=!eH^ z{!W3b1YRld5`n1#f0P@mKPOkGKQT_jKaPvd=YY_+2=oiQR^a6VKgLX#_P=qR720O_ z`8A<$7x*anX8Gk zXq4+Aq1S_M+H;rC3qgOtkk1wRaDf+sUt#d^3W5+{n2ow8Jy)8L;dj^_6hp|1e_V}rf`bhh^b;a@8-Q(%9ADFVM7 zsq^`pz~7FvLR$=duL}JU&^HGaC9tLwpO0L#Uh+YoWYkwbp`QghLYjXnuG+J;{9}N$ z>%MG^UxvMR3jZR|Qw;h!z{BGK?d<{l@U*Dje+}1qe>*%no=|ST&|d_7ry>8e(CY=x z1AmRdzg_5~v#ij)1|3iL{xqo|n(qMQ!E$`;((oyl6}nU89cfq_0iR*uqdM`w%8cdz z4GTm1^N)bk+a!<=&XE47;P(nX9qGs2rtM*VT)x=LO)um>o?& zAGoRS7D;!0CwijL+lIyJduEu<=Mm7047(l#UTfgfMD8POu(4eKHPi~-VA%B(aMO;U z$lWP$4EW;>`KyKQ6nK1y70NOAZvi*;J&T0^^L#|t-cHoZ~a^B0d-T?yp z3OsqKrXLabuE1u2I|V)=utDIB0{JK_{r0y38va3Gi@+BJJ}dAMflCGQPIr|)J=Wg0 zfj=`l+8&<){-}Z94gB|pUv5p;dM0(!GpLiEKArUJza&=Aip_3h(C-ua6wt%t zG3(JS^ell_fd7J#?o6Tg5ZHdP6{#=rLP!EpV^EX9PYjaGk&v0v9>0P@&{^6KF1>59*8co5baF$(Zk+rS;!= zR&?G#`b4283w#hXmd_TrBH0RMi2ldU#CLLqex1M(0xuN!ErFjvmU=!q6YD!8{cfQ@ z1Nx~V?O*B*2>m{RZh@zugnEwju|kJL{#Fp)5_*%s?E-%cxgCbw_l158Tg~i$J_H1* z=lg=cE%+}5J|u9Nz~VEa{n!nljle-Yd|a0Be33g_@I=8sO49kfDR8U6)k#r(_k%V~ z=$8XhUvqDr?mj@`_Xxf~@Y#YF2^=plTi~Sv`}U5mhY~^i1bZvg_mRMZfb_$D!J7ns zTHq#uKM+_iu)0@N?<~+h?5XweayIqV3oH_NwLpi!FC5YMo7e*n$2oMmp9%bNC;lgp zq26Z%{zTwy0*46vZK9S73dE(~$ozOZXt*RCI(f5>H{$bvTQj2g5J{IIu%E!Q1bzkQ z(T)=WKNiSmAW45q;A;Z6Cs;q-cZ1f?>xmEIz<35Yl+OgD{18Cu87MFV zkn)^55yDOjRqjXyd;;<*LPxiw=x9cYj&M>qfb}@!SO-kESzt)uCV?9S@&*LT@fk$I zH3E5!o_K@6dV$LXE)nPv$m`FPXMGdS6IdZ|mcW?;X9z47SR}AO;3R>00>=p)D=Tc7r0Mgv%n^SI|c3#xJ}?zfm;M_78nw^N#I6-8w9QsxK`jAfvW{J2&@;l zOyClM9)Yz2s|C&zSRrthz?lMP2rL#@B(Ol>B!PJX#|a!OFh^jvz)XQd1P&CKAuwHF ze}QQNQw637Oct0V&>;{&#o1^;_BSqpmkXpG(pUGy{_SKSSSKZw;ZxDT9e~8^(csH~ z-*T(Q|2zx#sF0tp@%Mn^8gJ+zApVrR3-|z$e-`wCz>hL>@HYd;HRMnT5PwQO0r>x6 z?`^=Ns;>3%Bm@{Wnn{~#T4@`vu|=hrC@Lw~hL}mB5)5i!qDVkK1Pc-&1E~#~Fd4|{ z@ld=NOKa^#OD$D8HNW>=d!I9BzVM?yeg6OF z-aI*T_Q%?5ueJ8tYk%+a{d(nZn}z)-XkP|SQvPQ655eDrH~s|vIrx`o_^Al*fxni* zKzud)SOecwfj9mH{x148{3!_E0DmR=V2m$-|2FvZ@y4IPFM@x71{VH<4YFRpDS|is zl*dHG-%X*z{}{r@!@tcHp9B8}^ozvV%tSi@{~+GRP2IpgMW{P&qR1L{FkBM!t{ez%O06chw!GK^y5tCrin11^!FgV0{(7S zJicJK2{cRm4-k(1JDWDR;tynIY|>|~?wX76KKN(3;cNHW2e)z|@;?aI= z+5p?i_(L!bjqnf9NND}74YY4 z|6cfO;qS#8eZEU@IyMBI+mBO(z0Lu zRqbY*Iae&APl@yJ=^h)o$9TSGAk=^)2nDZ61y}5aOX- zKS{gUCY-L_Y)>Y_ot04tim_wX<-Wn?UQ2k4*I4g2X!l0APeT371^u+c*TI(N0%j|0 zAMe3nIPKF~gfV;pY|527d@sTu1YN^)zWf$3;d#FDHdpu`7(To;gZ1tL5An2SOrC-K zhAa5PK9$DCvrLDxo#XhJ`EHz*k-=|P50oY@~n@#5t9bSa+vs~fNYI)Lb4%7MG z20Z`J;k37-b$A!T&(r+A27a$_;d#%d^CZk~X*o1P4%~Z3`q_>R)ASdCe)f?W&a<%p zaLJ)t)5&)1b)D}a$c=md2+#KGX&v5;@Is_z`1etvce&^}tm$O`X1}HaxB##0D9 z`&{|9=y0}woNu5!Zv+0xl*91W4BExNBaZs82YUE`mJi#DpJ@4yhJ3!D<-m4+l;-ye z@axmz>>pI>@OFfMM~Aat@{A7mLT*p%aQ1JG*YuYmJQKW<9@_o?kbGM+ilCp*X@1#1 z+oIun0Uyaw@N5T0X!s+bpWCk~x8EYZ(j|vkI{adUU#nF*6Z+t2;Zf{ zdFFY63(pTVo<78LE`{>k0{Ghqk2s!luF!6tiAHh>=lSV-=tg<)Ty>jv^St$W+RZcA z{7et=a9#N;+RZubZ5j{9-<WvLFS^3Ng>tfC zPR@(Dx47IRTzS3i!oxajryb*h>2!tv&4quC3+H~9y9{>T#$&nMKNfx!j|HxL?{wkJ zbix0^#rv;a@aMR~m%GCExM;3&(es`we6b7v3KyPQ7msBwdU{-L%LPBj1>fn)>uDE{ zSGw~3vn%{+7tZZ2JP*6zzv6=Vk_+a?E||02ytu+=x#;8^vRxLhy261T;pz`fu;bqA z;^j*&8a@kP8-BP;Z!281ZFl9h)CKchm;10w4u5vx=Ul%{=Nm3Oe|5PJyI}s{!ZX)} zf4U3ibeH=ES6-zqn%iAz%Utf&F4=y;mG&|h%-3DAI?ENF(a><^6&E=-BG5N&N=b1; z!<^>k+1D&wUQ%*C+>2%}Th_p%bqxz~6w)V&E{{ueQT$yB$#~8N&SeYJph`}BQQU0| zM0a^o$TT+vQ*2K~iElXxj0F@Y1e7jZrcV+kM2x?7Ueoj%oOhORh+uX@V_@mLhUE*F zHU(xc61Jx$(K;nA#K}HB)TSXWw4?+XPQd|e9=!F{&RJM{-Q^_>3u_nF&b|Dc2KBEq zEykS{nrLCpEsR)}E~pA8M^|7H=WaCd++PVTh~@cVDTUB4Z{qpZadVb5eltP57oH6s z&$(>g{8}3-uAD9`Icjvp*$L=M&Yi#T`nfpp&QqW~ey-!=MSM0y?3`my32`nUE<~Z* zXIXuJ4@@z>e4z*<9*-R=6gr2|-TB8sI7iVngk7&n&gG2(xTnAockMVo z3v*#yDQYlRsc3-sVxi{SwD=a*o_Far*Wr+IJf`!Rp;LAj;t;a0b{r+Lu(srUCRU|p z-%;SM^Cjb%R%GSeT7bktub@a48nsga#OtUdbsi;F`KL$>-Tg?3U5b$|V|QL|@HAPu z!0jR%zj*dH=1~ao#3cy8)~FaAQb*H4IoT&b*_kF+_ zIu@*MMRKo}zDh*%R5m(Edqm%QTy$F75&!micnt$!NGxCX$6iR0}< zbbg$4arH8F+hM~x6o0hlBPsa@wIFtaIMKyy=m$0;PI{Mqq)V=ByPd-3@Mz}UhILvm zwwp2ZiB_TE+UDj4T<@|Bx6>@bjUo-pi(#@W=FOiSSk!b`;QD!!m&}=s3w|0_B;5Ma zusHE%nucXfxanv1(z*84A{h_xS>k!10*jD~9h3l}vlyq?VtZgE+LMjtp5 zE|+lwAqhKR=aUE;?p2K-y>5_Th)M7h#5-)#YL!HpsD=BuQaN)Q`OVGizJGAkFJ`Y8~yQW-{Rt(!5 z**8gEZ*0U6&*x+u)8ujNaU#7Cbnd*R zOP4GyIY;gryKr{Xyla;%{pP~jIX5cSld+dBo`-wPQfX?On#A&$-Lyopo?<*uI(Ob2 z3{NgZ?-vzj{<3-VzJV8q1*s%&SNGaQvzz8GS-RM%?(UJG2;LbgN@*@@TDoW+s{k#O zEkLJiVk7f-m7~gtF1xvlYL%6UFYdG1vqAAe$8ZbP z9Ma2_j;^^XW0Fm}cCl04Q}SB6@OqcLHM9uEr5^4YF4iZ$lF0_9a!eiYg(*2yk11`Azc{$(&BAk}El%=-5?q70`8(xovUM6s|2}ePdms zjD>3&N6hB1qSRi;@$n7ImMm2*SjjjRuHs`pZtN@>w@_~Rn$NZh*8uuzD;L%-_g!8L z6TGZR>=u|MVdEPbaK{)_W#QtCstYe{nAbdKUSm^3)9h;&&0}kRWyv@h6fa$}SfPT7 zB*K*tE;eN;jCjZLv(o) z%<$MHdNLiaXAb}EeJsUskCV)q^PP|NvW!CI$G(}Af45=7TruGIW_muD)|bDAh9=Bu zY7brw4OjU5SH%2uO@9XKl}L|er;KiIX2t;4yKs?5D}Ln-7N8ix?LuYi-6_acq z*71>k57MuD9_!=?uE55@fmpP-fCJ`PU$%#kL^{U2fc*}~VXYSna-_rlbGsWF=FV=K zZO0HtJRN<1z!?TCHhBM}=;*#QGhXbC%3r)PU>ilIh6lQ){CW4=9;$s?E&6 zQbNXYaq_r!&Ky^jPNc*C8umqCZLs4nl4Z)Dh6Z%)=PjMRXuOI}ltre(Fp^L*tT#*Fz%96htD9 zb-+O$x)N|uRSQ%S;1E4s8koa-QIpG-^@D%Z@pOOCv3XEb8wGI2%hZh{9Tv)oG;Lmx zneje6>u$-+sQ!k?OzzNP-WTZSr-=Ux9-9ZoCH_?a&u0?@;m2Ki_{3CLYz4mB?91U7 zTC(ZNrz>aouOm!VPdI!Fqixc&*b|f$F3-lgR0i(Oi;q1uZLH5@-8!7HUN=UD{v9q%+M^O&a=D!7uY+#4*5?n8Jc!^@ZhNESNNsf?EfKM;fkz5{XW7su3wK28u&WM zHr}t&H=~a#9k_W%uzQqTVP3Zl8koT=0P7SRA`7# zFC%IhLGL8*RhkQrS({@X3*nj7HrqzEgr!&1sfbB<3c@MCh+rg)iV zQl=%(L&ms_-j@^ggv(HbnHlBy+Wds6o|XZ-1iW!2;MHQb1xvBmrIRuaa;4N1HvGmk zmfE*abdn#{sLf8)%$lRbm88_=laoTJ%cA#6m;ZwO=m`{@W#^(96G9STj!Ox{Ix+3> zLNIr^Foln!@GBu!a6c>0NPeldJlm+sHp@NwJBS|Ruu+9i!R45fa)LXujq;q}&g?1p z@;pFS-2y~Vm{sfKowr84y{k58zj}LDZPb4C_R5EiQMzk3BivX+Eas{$;^wbi*;t!) z_g{p&1?jpRwNlZHuUSe}H!tJ2402FU>pWMP)!EQ3sH;l#v`&RvKaIc zwTiRLb5Y>0$jw~c4z0weBUbSp_8kCRM)dRM>TGzO(pp1bkY8fY9`YRkQnT*Bgmp~O z@?!Ke{8o#6s_i~-!23;uBQhcHF|O}34AYX+wsQ;;D8U&(SBEbg?*_HTZ;h!4&3M{W&YOF;6DrY2Zhzj zg15_@{)7^5O(=2s6cyoB$$O=Q>1RnZ{eF#)Z>eH)S-AWvn>g?}_?KKIPZfxjJbg(e z&txqx3M#bc3YBu8{w}gZ=&;qm(UCRan1XA_R>`UTI%nv{t?~^ow{FZu-AA!Y2aCm zcwNkn8S_dNHXTUWIW$-1nAM)r_gX${Hf9@7Z9~~*oPOAN?uGY__g?6$K4n+*+LCud zyKh>EqE(U4zR+hi4xPF*J6tYwMyH_nRnirnWc$!EWoef35fvO9!dI4>eis}XdDF4@ zBy#ZYo?~`JKl>=bjrUGJ{K8+5+u$+M5Y>93*`cAEA44BpGBeH&c6(r_YjV%3qo-2)Tan1YQssgXAIFYhSbe;l~&8Ymk7f?d}*`boCZmp%y+ zvP{)c0UK8dZ3j&0r;x9U84x&7GQ>8Xw4|(yLXW#HPSf;^W%9T-ej;LovTN-&J~d?z zAu~5+J1}HJg^E$Og#jO(vd8eXL0XC1m|XP%e##FJ#`OVO5Se7><8*BMA+2NQD>@T& zj8kY7UpaG0t7A|LewI&thxYeJ$RPT5Jl#sQ;M=7ZqEe1p(3hkZOcAFR&w@%a`xD@{ z)q;HO?*HP^rGM$Kgfoe}SO*Vh9h?#$gB=JX{zUppAvjRA(FEurGq5$#`L2#H@>ieQcI9XcFoUM9(s7 zB90-!H#@zc!Km_@)9|HR_E6If<}oUBNU(2!xkb-4eX)F?nVW&mkYSp6J1t^DZZ(n{d9ZUEm{99& zc{F+h)j88{xPpV8K!cNIj-4eN?c^-aJ$jbEdyfnra%Fi)vP4T+vKuucddejBbvPhr zUq`*+#~g?F@dhQqE)RxG6Q+1to(r$eM>VA2gWbitE!o|FvSSh14nkTdx^?-9LV%l< z`K-KCK#;lmHm2VtpMJjp0hb0|jkQd>`yX_)x8$9+gBzI`--EBpG2X)`^-i-w&4@Qb zP56!0L8WpZ&N6Qmac8eG+8<(UCC1VdR(M-pMJj#(P%MJgDGAjl=ZB_xqhFK66=x5b zQ@v*PDzlR)jf!6!F$R#nvb4%`^DE{^PWyQA?LT~+SK^^QXmN%v^R{)9G%bVa)7-R9 zC#}zaatVOEG68RXIY(H&84%mDK*T&c`ocaiSB?(V+|N=hql_hUyeuXo>O4U-CWP@Eo_ z0zjX)e?R=HRS4^ps<(=+Dk|!9FDuqGFRToP;Wh`6KOj*OL%SK6#L$Dx?*#KCaswpl zJDNNC_#JjnKNwe)Z&c=M!=O0$ zdW`pUB?K{-R_3%!&+IZPG4)*Jk)AQi3l^MCMp3)^=qjRXA6;YU z>ZNNOT|LOloZ_|0hn4o+bd{BTOiKO=NhUQh1%KH`TqjY5=skBCj4BfB}?H#ky=(0qv7pQfyDfIvM)}D|3bgyDMU&HkLSb=|t!e zh&XnB?%2s$gMrW7_-S(*t4@V?5J6dik>C1!beIalG+`c$HGc5{S$5huTZKBM+Ame7 zN_L|zsiLVPtu^`4FI(A|dBl0v+|fHH89Rra2>#UhO?eg#ccbr1PgJ{bv;G;ujBh-0=@_{ttW*G zVD-S{EUW=|Ye(a!xd1=@La^11=ULcH*vI;(;r=_;DR$uf766R3z2s(Q5B!XW2=c@( zww<__a+)5&12b0NkLMqVT#SIx-8LjOdjXb4yk*4*`ZFHrb^R-N29e3{5YdYJ6p%sv z%kUq8zmCY>1CGDI)6u9Rfu{aBJgg~s^R~cM19Rzr4Pbo#2@mqmn}_O?=i3G!Sn#%X zsKi9bg#O>+>A~{?paNY4r4O9v)%8MwUR&XXa~_?0mk(#?KHz^9-u@LQ!1ZUiezTl< zfV{k|t%6C?3=j_0n!{m zPGkF)j{xqzs0X1>!bL1~Ak$kzG$7hv1A4u*4E|>Uzf;iEDKvFNLxRV?DrjC6G`}IS zYD$%q~AWO&N}?X5<X~^ zZ2?vc-prlKFx6xZzTz8{d4}LYjiZ&lbsvjlNIJOsj4;T0Gzz}H7TD|k$gG~3 z)t4b3Ka_)|RsVZD%nxu=;m*5SWx;j@7 zUyXRLP{KCUzYmXpJb?J~@uVZ#hQu|LM;#<7tpVkpS5~YT^UJDl*?1k-p)7>IRT;57 z?avdxPO(neD8IIXdD@>ReyK-xZ*N+Ydt}84&&sCcxy@sNW?%}~ z)>N4SwZst(AA4_UDOTO2m~z4aoItNPmY)sUSg^_>lq)BzhV$mVqE@^l(P) zCIAzYpf6*0tT>L&GB|sd=Yibd8Cdd=@k)7ibYxg#xKK?;ow_Q7jf^rd8w32X-G zp0I8%C~X0Q`3{4v7)P2S3b6Zu46-%-w{ke}Q8|ymPz-mQiMs7_nOAh;?)GipnVCp9om@(C3OwBg(0Qm@0vSaPR@B%tf^1K=F8Z8*b zKC4%r!g?J_1_Wo0Z$8dA+&08ab8DV6Fc?BIfU}1Ff0i;)^!k$LrLTqBdxi%OH>K4Z zKfzQz-fa)an?1EN$`D)M_Dd(gZ#*IHF*`m;;x#!KhM1GG$BE#~ zMvoCV)a*6hY{MO{F`X%W*60D%xl_WWJ98)RJUx8+j?;GQ(QVzJu<{6st+T0e4N3N(6BZoasA+aAkONYkvE|^`}tg*jW-z&!qx#fOQ7% zDD6C77kd=^3EtTyLI9_E3^=2aO2GbM06}Lg@ZhI8#|r*UfpJ6;L9!qH7=H8+F;0;w zk3B@%3(qqM#5=DBLx=k3;DI=2{1wmJa1$!f2L}c*GHZe?>cjA}vxz+G@A#R@Cb(VR z>|EAA_>gjAlEmKwIAobu!^x80AQC-PZ(Sc8=!0;yQXhO$K_dt6gTE0s`o(|_69{i+ z8GKP9>SbmD`7$3hJHwfcdNRUU2~3Ho{Djt*?8JXoiOpA3PBLpD2uKuItoH&Vr)cW7 z!Sf;>_M@2`MAonWAC)}#wtAB-5bh6vj(QIT1czUyX@CQq0ud)&6q}szkXa(k$<*(( zDLP&$vN>F7tx&{aA?DwS!e*cFFX}W*pMl5xOqw*3t;$}utxZ+8imX}S0Q^@hX;K+`~ns3u;w2G z#FM}ftWz&UH0ti*!;9?aCsgL<}szxx6#z2j$!FbAwkKT-! zM$$8;D;1Kd*vnU8+XeQ4aepb7)|GjRZD{3wS4`()mm8K9-i6H)W0hltBHSkk0|pnm zs>*;#hY8D&UeLGx(00~buX#k?tk?Cy1LF1v56XK?SMCFY=lM0czax&m)0F<+n4|dfD%dau&+2%TX!rBhr&pI!| zck@!@6#X=Gs0_39vK-L<;sWSIIc7HWd4bo=wsojqR_6lL%#tB2!gtQ45y0jggi*Pi zrFhF)K&`T7A)Z=AIJ1*JTdSrga#kZ+)piSVa4A+d6-zeGyL5|q+`2_Jly0Tx?`90_ z{+;}-L4FWqtk!&7{-AvyhQ9|e<$P82G^3Zbpr&A$Y(eB&a4T{~yA|w`741m( zi@*X9B^240XjWumT%1ZanC?%MP2tCv4QJ~>j3b+_IN8vbQZ_Qlr)5KTOg2RyOEyJm zWwROUnaQ$Aqc@|IWi#gE%O*C%sr2TtIN8vbQZ`Ix>kZv8*%W^)*%YUh%`GqBj@xe5 zHm47T)**OsGKS+}-~QuKuDU;%6&%dQzPa*jYyGHuFdQ8+>Uwah#kU8$FfevCeS5eW z;|}1%?EYw+Yw-k!@&d0#k28JUj44A*Nmu`mfzhn%M)xB!79nO`k6CdTyY#$9R)0I< zf`cOh`z+u7un(mMrSf%0>j^I%33S%>vWba|MAG2O{n>%LO<$k&pe88LWB9O5!K~{g zMa&{ck+aqzM-%hl^V~$Y7fga7Ae~T~)ABtS4Yfr_CV7M1lU0j?S@r|y${#VXOg#D^ zoR2*+jfy&iaq5^vJdrcpQPZ(C!PbMZF8CGzrgvg-l*C1>Fl|)9)SRSu0 z#`9M6Tx-2MnVrOo#c>&M_8=Jsm+{F4to53bO31~JLHQL~Ld2I85n$peYrW3g158ij z`4k|rz*zr6v?vV}@^YYh!GLTVfJDZw<{I8|Aj%ULLe_HMf`o_*z^l35hnQUw`mkF4 z^RDI!A3}FZ=ba|-o^v<;*YH5-{&}RiW)ScPMHdgs-iUdK%A1F*#=b0} zFN=n9YKCmpfqfaM`#E#s_c8VB0{6P4u4C#trrsx^`y}-)McdfTPKk;OP#c^Q6&Hw= zJsybh^(;T0v=gDd??ZN%AWoI`7M3e#oT2zw6_{?;jN#Uz%gvR=$}nOvfKhsBzzY89 zHo%QA28cEXXyvFQJ(R9K;HY+o>C=sBGKl1x+@geFzjn8Q2mveHF%PIZ)@THdZe}nA7s??)SNA zpBzv7FyL{~{Sn~7 zKEELg?k=v*baCb5#52{WP!$SxC%TwA_@88obJe0Y=(8GfWCHt3ut+X+jKU(hIEoB8 z8ea)I=n_lRf zv3{Pyv3{|7PxAnHj{viMl}CW#ni15%K>`B-OqW{TV#7xgW(EU^S;9Kh%OhCenqg`z zrp|H-Y_K%RXbS6pbmtGrTYd1y^7i*3jzk217W2d6)~^p~xQFD8$r=C>!5x;4*sc=1 zKqClCs33^S?9>oXDhT!wGz4O&`5}PyE5XJx&yCo6HvRc1nDYih!r0ZEW$on{0;LE# zVTbV}JB4%bQKGL$ZovixD`)}um8-j03-F_du_J+uK{VYmlRRY>vf8l%hR#91!-YDV z`;QgY^U`CjLPH{G*}&CLS@2;|{;4M|p;egNOx1ro1iBAO{|&t|%qys#+d;D$JvXTm zM$G}$bE`RMPQvlLh&iqU=PGVu&rP;-=k%D|&Bs!>cr<>>3&DGS56+Dsls&i03h;9! z1n%_QE*lTemBq*O#P!_X0(?|@Zc%B)qSA`}0ilRV?zv4Web4T>MQ{qGv?ii@Zh*bl zY4OB`kVl;sPh6mIRa_tD7rGC#O7~&9r4Mtr>ciyQwgYl%J9rD)4Blpd8%*5efpDvR zYQ)fc_aRRlh%`c*Inx8fm1XpnJa3=&3AduDkw1Oz=Pz7|&kPO@4^*%q>@!58Fk&_H zcw9)~v1gl+{qTHH!r4o4!|dSJBT|3_RV&*P0 z^SSqp8|?cTMwRZ$z2!7QVvk{?It>M59Sr9i<@r|d zvCYy-c%o;Rlm{!F&mu2F;E;gqB!iDfQ@Z{r`T90 z*1_G6zN#&L#+AHdTFk^%3<4J`ioB5Q5zDhe`vAu}4HuOM)dm$GyW!03#H6YS*h0yB zcKkI91tnAT@V39rq?NI%F&>QaY}8V3%kQw44w1I(=+0fsV@OCZCP3={4iRH`6)ipg z+Pc{o*sa6v{+DrjU+pjB22rdMVmhU&U|4y_6L%?3`mWt z{E~N~UzFLGd^3AXB_nc}+w=nSQh?oBZouWsnb26!@^W}2^NyV+RC^dO#mg<1X5DBb zlO_`FZJx}mpr<^Q6PzetUy(7X0MkHrMT-2cOE`jQLGCq$);KIe;ydSNb_pr?He-Qu zDkwM`m1RORa*yS^yZ>eg$mX|@`PbppOOfX`2t~>T^>m`f@y({tP!ldNz{!{Z?TpkL zcLO;)UK@sU{0!kaZFQb9QcO^v7dd{8MXmZ;K(UnJSPW@n=L@*PtJlH7zhJj)455s7 z_pgV#)1~)GlL*4_%+H@6$9oG?sjbQ~-%^04x|$@cJc0$_NEUK2!YD>#qFV3$`{PjW zPvIhfiA9l}L;yq&@r}jeL38C1b(aKA`~Xi!49}wkapU>)FJpLa)OZ%B!P6MSvosOU z6Wd~V&enKNOM{1nsrfo15zqQZV|ZSNLX)po_)fuBSq#r>1ab3qPFD=i-5O745+0s3 zEJLBO&T)E!qYizPa-TT@r+GhbPALfO&RvW1N;v+NZ&rN!h*_481()_eF{E--X=Opn z7kQR1-aM$o#OE+W9Ge2BreYLC0n$XyM<8;Mb5|Hn(1|f54uG+TV}v6o?*irZICDL% z0B4fT$?J|_FP5374wd2dI+8hHPUW~0C(7uH*r@l*(zZIIsZh(-a|dvrv_!%CI9Usa(uH48=v}*$FWV@j?79U zOJboJQ^y61=;~qE7`nRX;*5)L+b1CNC$K=CB=cX(s(E^u|D^k4%Y1=CEn9z5$$TGNi$^5wRSD@ZIlOuBIDIO3QEoE@nDObt;&*OKO3)|4 zZ1pt!;?(3<(PW{of)$LMZ9GDWleRKxva=FLDD%);$%4$YhE3u`F#6y62;~hpLRqET z&&RpZFD6e#Yi+`bmqTW4!s(Vn<~nHvT{oqfU~(PpVBGPRz#;VKlFp^@R<+QudjUL*aA7k2zShld;u?6)YJ5{(3L0X>vdjX;wA!&my)NG5t90u#Kn_mO7$-9DN(2VGC&qfqUyRi;&Z`_0 z67>?Io>~d}dP#ZM*UeXOJVq^((djYEvaOZ9x_37b9U&RCa=(GG%L*R28Kknof)KYo z#AKNPEV}MBLe{y2F zoUF0`2cVIE686=ColrLR3k3TmfEPv5d_elX&HUL&jv(#e>hDT@;CbIX-xiy<{aeW! zrg=`pa0L8Wb=~36T%ZT-IEqvOSFkxJJ2&(WDg%y-V|iBsQ5fu%nw^A|)#Kg3WM))j zvSq~=f-Ac-)m%%DnrrF7UL^n`>xw5gY7F^B5pEP2l9=Fj#%Bk9NP%64U@KS)mg0&< z3+(h*M)|>&y*i`4(XW6@-`*&eG^ZhDg77G<$VEu$5=E$%v?IU6Sar36H>Sz&5yWc7 z(&V=)O@1#Ur8_^r&hOjI&$r(Ql`(+B(BM7p%r&EB01J*E*>sNCDS!}IEmH=6L15qh z;Tfsfyheb22OvEIZ0fR?8(~lexJgaQ!q*B_J6tQEX$1t<`s4o;6n0ulq~&=xT5wbp-?@nT}%MTiv?{|Nh{ z1=XLq3v#22?RFymH41bUW|8*T94Cws5RZP9J~3@yRLWlKjhFkI@U|5#Eg+wkzT4Be7zt{Zt(q_eSxz4rkMQ~ZuF!R7A$pE@+A zycu{KFeKycaPVFxc*XA)Vi|&6H!$NsN}I71bxGZNZe*!mBj%WN?wkdHEI17j`7+W% z`JofPBKHHX^UAS~!x$6Y1sSL6gWaYNiwi};!&e&98lkf%;F-qC%C1*s85}(2mRDI# z7Zg3OvX(AX;JivdT)_+0(L~Pd!PA=?Y6Bsm-MBmmZ~IQ4CazCnWzT!Z=WnI1+AfB| zzWo{s6T*cDd4jaMke%jm*=QnQEGFv8s>5Yt=qFHd6E@@G(s32%_1E_2p(-nuX4dxq z4Pb4D(M)6n79o&`RlY>4(&SZo;pid$+Ozd)89WnmZ!g; z)5L9uPrz?(=x4}T@{N~4;6uy6VVzPCt~J$VA{o*IxsxWIp!U~-&|gRM6#tdBRA$yf zr~rl3XZTTwdFqw~B$Nx;xon$PJ*)qAn^-N6DN?{nC?A?)5tX8`zD)Acq+z+$MVc+V znOMwrNUL^8gPdnDwI&S?Ebr#kF0hsR;`?po{sS*iM!&hS$&MTA#O+jZpoZlh^oeff zb#$X>fX%)aqhnC}Ghm#I#%4sda%wAF)&hYLvUQz;Xx+--)*}qYA7j)p`aHQGBizd2 z82`ep9D^xWyW`s6xPIWcHae~?j_ZEMwb^lTE>hv+Kux*29M>MW=n1#>I$?Vq*FML! zUtC3H;nqGU?0|MrB3?*XkU--{@Q zqM_8IA3gR#QSewexMDWt_>W*++{t9f<{ugQ9@Pc$|YG#IDsty|sEUxK&7aZyDP-7qo#%bp*6Z8M*!Gn{%8~O)yx4mK5a6=P!~Ioxl|bgLB3kL0 zR7ritkGG0wWlLohbKy=xZxu7G#E-XXJYC~sGy7QQRtEn~JUAP0J9LqU&`NV9dI$+>SaCPV9lb0!65K!?-TuN2p@&UJTc* z;Oz<#w$%0^uN-8RA!9w{x9=y?!_5utKp=X#81M|s4Y3ixXvnDB!hsIylQe+;BjJ-q zIAk9K<1OUir+_f)wg8vI7jQ7Lp)A7dU z)ATI=`JRu)@v%Dp3T1=J***C_eb+g=*Hf^y^`!zt2<@4~ig7>Fq z`OP1LKs7!+$vte8y#RYfd5Px@f+@xN6P)Y^&5&-rtKPC!{$l|mk5aFnW4x-@_X3YA zHG5^t7D8D+Ot0)#(vaLMi%=KEhL9G1l(8<|%Dw0#p)!u@ebcOrBB#Yf>jy62PUuoVqE&)VFt=C8mNZ=z9Cnvsl@L_movYry~yy-@vj5$(`1fhVYas22~zubZU% z#JSaOIO1*fBi9_=R)3H2s@+%$JPGZ_ujYKncB39?Kd{~S$_LPLe2kXA{4kCdwmM5d z3+!dv^j3G9A;WMP>f;u0d!!uSH}$qPAPJ2MjjoI>+pg6iwG1h<=PAs%c3~y^u8kRJ z7rq5*6n6_h!M-b)VOyZ)E!Y;Qd5bF2B=Z(ke!B4Et(rv_e!Nu+=vr`;e(#5FBi7u> z%A?u{={}@rBUS@Ow-FU^qK$ZKn6wd;3;VsZ5UNBoMf$xzWZR!$9l6E<74G|i)Qoif z-mQu4!(R!XRJqAMnm}ooehvt9o>KIC?@OB&ErX;D#HGywJItSSE=ijf{a#613J7-I zO7OOVKTXf_-|qNmEFU6#N|pt?wnZCdnuC2b`j$nw|l zwt|07&+_5#YnJ~9B2_jJ%Q*v77mjX{N;xxa)>zGxte*zP)GR;Ayi$s*OsD-$Tv|8F zM%uL1I_>3gX`%LxhSa1@3zIE0p9BbsD_3wxA1j+d1E|90A5nSm4*pfW*H_(4e?5Da z^;6IntI(cj2O<9^7=TM zvq(A65MtmFj?0mMIf%fesdN?V9(=L%;Qz!P{D5n1B=JjpxaX)3a!HR$4}5GXd5;RN-(Vy1ik-x*^k;j=q0@ zB|6f$6kiMpS4r8SH!@T^D))f_r;k3aC~__^^3xu%jRMyC#UO(#>nG93W&l9us6t8Q zV{h_j`Q)>Fc0~?j?w7j_!`KrhpCgpzDNjTe$Mtr=2LZ#`v3m&1V*xq%Fi53daF-(q z)4ib5#P>^Z`ArjSJ|eLH>OxNoKqK_@G7TT*p^%EAeD1ocI|OCR zL1TabWIcdx2ID-DOOa>%I_hX$-L5{Qw1UftE1($Tz)0vFV`P(T?1`*LUQqO%c$?F6 z;2)Rn7uDG=Tn*u8JxAuXHps9SvI`{TK~%H4R_;P&70;G#n!| zh@UhV*l(`(?e-t~Pi2E#a~@;3SL=N%xB^*&WRxSm$%+zG-%j-vgx5gaYGI*@YNS8% z6ILGy?SBX%CO+SZGfMewR`BGR0Kk_Nw3^o-KkQFERv}?(7+iuNp6lSy^fLq`Fd}$q zc4l<06+A6I`nXthR@7$&zY-sP@K&h>Or6bLBIDwte-n%5rNGLT;^U=3^)1mV9B=tL z3WbXQ_d1v13?rSrETF7P7#(lAW zA)3BIR0e!y4Z_NPgv_6ce6Z-;`MfNct4R*U=A0T;SnKg65WOPXRuk+VX8b!Ct7k`??s6*EgK3=WB`$ibFEsboQ7 z0k*60W~tz|V(g~J2k9nxTK1W@-U5Q-DjxUp1C)WEw_Awlr$t_OUJg_utm6QIoUNb) zW!c3jHPHTk4D>(#>ver*U7r=a0Xl#$rKP0xrSB+Oe~!0JYv0jm?MqE-pSAuUm)W#7 z0GZ@0LF~h6a{DhvjLXt;Z2oCbr`L+?eG~SW`US_bVD!ZM+%OS>DqqX57$2)8g@zqA zl#3)0FL~kYh)hD?j>OpZhfYYq{%!#ez;MT-Mx;00!8~it$Kkv7c3=t)W;GRB!E82o zDF(JbTZ=~Jax1W3cLwavOXLPb(A118Dx)cgG_X*+jBwx#s7o4Tvyg_$athuhUC|=C zKLfYT)C9&mOznWOf~i>72<0C<*bJsL3oCQDMHL)s=B(gaGyu8Z`7ByfaBuP!m)y`Q z5N6((Z3RDvD*niE@EtK$_8RXS;kWMD246CovtXwXCNWeP3GviZs@ z=0h;rxdeKyFGuial7j!qPX_NYA!FFLttNJZ4PaPm1s`Td2TES@4h4@o!xOJ4lZ?nN z0zC~NGtg@V{|LB8AW&#Z8YOA}J+_w-_E%q_RvimiV`X=0g=&AwhJBTIS>Wkmxf@yV ze$Cd_^str<`)A^Xk{t!_Y#a6l;-#9T!y7o&u8#L}Wm{{g(xuNdg*v^&zBt zz=r)0(%ojmp7ue~&29gQ4SPOeM;@gla@#v?*oz2zbj=Ccur-9`dR)2^&TYTmhMo4o z^w!(3pF;Uctw@jeD>m#*;-#%k4_jcvF8p8`hS{(msJ*$NWzdKIekf{U+u`alPezYf zHa~QUx~jAOdX>-${+=BX=slV@s6U%q+5b?z272%7a%uz&_H{TEibk)>6TqH`ew8d~ zJL+{R9S!_wI59VDu?G3N7;+*)jKN0>kw>^pvcjDK7YE)7OXr z5yQ{1HZ04D_X=h`Uh5UP4az(kj4%>?upm%Jr=##^gTui@TM?fxQ`fb z7mR8HcUiXV6qnobgLMlzrGtA>@fkDUW9ab``U*e~`MTYC`np^0iGBh707Yq%MEpo% z^A9H{yD&+#W;3Ybd!v4{w@W|!i{Uj}@XNm>c|0{WP9ArKv^-8?YwPP%`{WNIr4{H^ zXeb5FY`BY3B}-yj<<5@EBH#r&JDuPF`wJzz6zQa|j&$SV)3I5h*hMBmCbBUQxd9!MTl$IQNIRZnJ4SxMu`q))n@3 z9S@kWZ;!m}8Ugv?P)fY)Pt(L*&0Fj+BiPxE3KBV+Io4p>trpNujnXqqyxHN6pzzc* z)(YOI5GJV%F#}`&xKV7#=Kw0Yk6MdNLj0C{9NgONq!&I5%7ex%638?-%lYh^w zk>u7MCSQwK%-5^j<7z(XgxoKdvk6EN7iOlY90R#h zRM6y5FQB5lgsYloIxTw5kR(M8#{nE4ab=jVo2n@)c7@75D+$-WcwF?xa6Pe#Rp*Ql z<&W$v#-dqAF(P<|WK4RtF<7M6Ilif3Ln!mf`FpE%3!>5XRSbE%fGy5 z1kayO>@#~HE*n|oVxXbA#$?b3XqOD=jnO@lxw>UA3>4c7PVcuR;)=xMqF3R1VmQ-5 zs1G9z86c;4hX@iAM2NYAR@_(N5<_SZp^>FJB|YKLIBX%L^wM)pmI>P*2AEUg1w0rK zD{*?Q?Cr!vYUnjWWAKaA?Zd~gnRE2vpRF!g$goK3!aIntO+dA>&(+!ZyszTL^5Y#0 zXR%^!17z;Q7AuIQ)Lx`Yx7%l#b{!%iwhE07B6ew{Pbqthw#~ zJjo`qih_6mu@km4-;K={K>X z5g6D1S{|7vlG0A1&kc2;PWDg4k0Jvdb@2PlO=2!1JMa#!^o$66*<6V$RC17lJ&AD0 z3m1vS%?%S&IBCW;zX1*AjR(UO4vEQ;C2mG7d8c$c(dMpw8GZ}%h@B!GmY0|xP8^_o zBe$(23%Tuu-~fFu+$0RHtE60oU2fpe+%D9hZ-WTT&wK@lTj%Fq-(~vtzm@x!E-dr~ zUxKZfpL=?!14vkt2IO6@{eH2utW#shL$MqLiK&})YSvpU42G27Z<__AhBEb^3=~#f zUpQ0@K0yl(;4MM|)1nYdEr#Y=*8ygUb|MH7%-?*-32;hp1%Kg3K;laZn*%R2)wROft(<0;FWW(Snc= z6RD)bI;q-JyWG$((TBiAue|H2{bAIwr6*y+DYtzpkOT*@owxr4Xm39>vE-c+?(Uak zUnn>nwuT!rg?m*isGy(ASn!v7#G@lSbRQxLl^K<#&qbIJ{_};F=dQdr(?Qw%m&63GG>F0*@&3vc(eU<>RzR>>InSsb-`z- zTU8K66St~`rUNnX;KCe0qLhNTYx5zR`guF8OBVQ{}g&dkeZB9>6A5}{K< z+%%+$r&Y->Z4y-X{P>5s7;AdpDW?SKQ zP9ds-v6VrgcMdF;OTpO6pbN%P1}U3a8m%sykgW_-Jhn3QLA0d7Rt6~{TN%1^q^%56 zNVYO;L}c_lv#kXpx67!Fj_ise`-f#p0^N`1o8|H4v2!8oPFTJq6L>7SUENh~D_R!Yg1 zYpci?hvA%3>XMLHDM5*JDQ(m-+RjNebqcCgM{bb!|DNi^vOz(yR+()yd>_4_F7w2i ztuLV5b+dH}8Y*eF&PIIyDQMgNuh~+{<@@BCE!a}uMk?`WTGfr(1aH>)Y-UU`V>auU zEjnfkV`>?*MaT5&m~D)yX3RDn(}S2#rgEK`uRi)J<@A_jb^HPb)3vHAc z1Al9wipjLh=@KK`p<4?i)ZaSGiEU6AH!n~zJvjW&o9kQEL_2m!WmJb!NaWJnr+YqLrVS~WEr8dVIbkvoP99SAoyvn13_O|gV{ zJ2oiz7&TkgAq3d)X151$6Q%=^*79WF~p)2RiW6&|`=mqF-PVr4p)62KqgLxs$f0tn}6}e*pOpb(` zRt9G#uD~`!%=}}ojm)5PH4YmPEtx`x3)^_r?(yq>0Gozuf)I~gy^$q-GMl{=n+UJR z7q!M=V|;e>8Y?&*>jC}mV~-Ih-j7_1%(!Z3ArupjY6YCDahOe(#SH+cnS1mwu^=)$ zH*^a(HC19O5)u502%OcFpTSr1PFpt@HI0GTjZk{8W81+QG@*fReIK2DWZ0E2)-T5) zEpq3+H!MV)50qSoxdtEhB5R$Tb&XUoThe_Epi|MEp^`P7V_``}5GE~v5HndAgmLY^ z1-pxIpa7uJ7fhez6q?AKeur4hvSv47nIB zo2y_0xYAN(RK|>MKxjBr0VgFbnZ26|0Wv#P5Mbi>cbMvkg2hZw)n9|^VS)j;N2X`|N+ zNm7760B}z=*H-UG48AjgUlI}qS=^QbvZd_Yc2u=ZiG;g0} zysr;&&Jyc*1j!QXElA~FVx>R6&m0c5B1{s8njKe*L~P`2C`4>+A!1qwKaFzW%N9OJZIvO2#h?-E z1`@7$19O^{X0eE5J&ItcQ4e zV|27Bs;Tp3v#ImW(a@^_%~K1dqI);@;#(%5qqLL43S5AXuv!#qI7Gh}Oko-Dc`O6c z3*GRLPqe~@1h7$z%$6by7%4E1Hbra;`^#h8D=X zUim&-6!;=v65Pz!*v&HD`Hz7P~ydwen5>@Hvrzccc zR?~52O&``(+aE@l+1UYXrJdC0z{RHMwJE-Eh%ppDWzJl5F)-MWNPI0=`XnK0KI`y) z9-tAQ&MPocA;SlC0Agidri$9iZVSGig*qk$f3bl>q~gM5j!LzmoH&#gT-lcyIMcL9 zoY|=`Tx4ahvZ@c^nt3Fj>S0oAGqbPuM8A}f8L}~J4*{3%CiP*F6>5^D_IDZp2G7>&Meql0OmP*Y;iF@Z~ z$g9&m1ppVFQb~|5oGu-E<)rgJI>BrtpoUk9sO`W9Xx{iw~Pqy;5hyhubQ>A=W(c<INsd89Z;fAQk_wV=R5{YV@jJj84+SLsd1uw3C9~wKTVV}(Pl2h8Bej9qoGEs zfYFUP8J-k2bD03Au$i_E`x*dJl>3Bq>AWNs?2m{~XWPtS>C)LY?3uc_{A`=~G=fvw z1lxw)&U7IW73xigStagj#cEaI|LFFcjnPT361YH>R_6_T}Pp#rjGtXFLvOJhS;gUvvIJ`_q+xV&iB}-bKsM{#M1(t!cK9fk;D7j z0l>1w0GY}Mnk3!&bm^o|h;%dK)7f_Fs&whtrZB%R#iz6F)T!yxi9JQSH)Ibum$Se4^nx(bv-@;=Fj|cqVd+ zY-oz@i!X??3gZgmA%KbLz6mmn%>m{^*>0L`1$Tc@pp)w6J|ycuQI(x8F?8gl2l{

vTJQ^LV2zSy!=Vq&P(g(|JzZc2EAwsi) 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�c*ZVaaip9!d;g@9t^c13(yEg_r!^Pi-39IF4vDAVtsx9&~w9sRtV+@ z3T$}PnHL^C0b{N)+1r6+IXCTvyQ+P>p2TAx-s )0{QH$x~D8ikRKHT;(3&LwphM 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 V>2i0oza+s&KGLpqWT0O5{{XvkY~KI? diff --git a/thirdparty/xpdf/3.02/lib/win32/xpdf.lib b/thirdparty/xpdf/3.02/lib/win32/xpdf.lib deleted file mode 100644 index 1bc6b10d8ef46a944651953154af071ceb38bd4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3966848 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%0AQ&-F#CE$bqOY0H0*uISd?g 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

v;9yiT4_%|7o9#(hm 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 z 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

jcMlr4zhs%V!_Dz9_1q!*9FVj}LqJv~qq* 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 z zR#`+c=Augb3rJS^*S~UTU|?6SxGM+OsCT)$``pOmq$u|G1s5L7Uqc<6GEH1_@WOpv zCD=@m6enT!UOp*f)ibV@Obd1IHWJDwk@P;ZB)3aRTyqGp(=8a5gz`x?$|f9_xMl!^ zg%+Dtn~8Hz=j!rZIBs2Cjvs84Uvu=MG=|UJnpnQNTW@8iA zkFI@q%SZkFdG4+8JxKo|{`I*1x%-el5v40kJUD4*TTyZUi}~(7@k9GwAGbgL=D4?W zzj0$r2GitOiJOl5?8PVg`=1@@el7m?xWB~@faYtKF2(_y{@9e1F=Z@7D-B{$?L{#oqn?;n9W zQaeyv8Mw!`EmnL*C`6|4qmJcFTs3`=8BozlL&>e9U%Y`OPUf z|238qlgt4VHyim)E0l(%=64Xet@_}OHwJSB9`CqkNzx{Xa z{x)5HI`VsSSnI;U{F3U|09p1b=OkEe@vmXCIDoMdM5}pg4h;17Wnvs6PS}sw>50el zSM6Q0wtq{mdw=||!n49wHw={VcM=blo?ds`;{MGA?tQ}B@#k1PBrqng`u&6b+eWxw z6y8KXs*b-Vyp&k&mOgp%F5=uTY zs{*dWPmX2UTxWr6&GuK`DU=?iZ*QIykQ%ILFt&aU`UG9-V8*9AmHQ*W+%wuYYqs|KsQL)`5TgYxnj+{bIQdtj z{4dQ}y@pt`Jk0V>2Y+qFZ(4c&2f_W_56(N}EWHBmg}#hCo!n`@xnoR@ioG_KAEhy* zBPDLlzIMg5ef^uV+;7G=Lyy@ckivCYVs$~q7Z*Gce`(*2{=Sj!O}X2Jm(h17CLSz% zY{%>8fPegD^p4_vJKUe=zQ+0$=FpKhynNj*%0VeU3sQOslTZ;>iu1s+Byb^2aaczO zRhIaR`PbL(!>;B2;+0shVsl*myK-VPXpa+%(pDiR=V3b$o0GxfhqL$*EPfP=ABOmO zu^Cw`VI)f!jfA{v86Cg)!|r~By!W`-kAUsA=~uDmh$a(#opY}cw!Cqf&# zgCc~ddsY`$lWw%ScouzKUwj$9rp0e9o{sMsSV(i?IB$QjcoBX=SDUG0Egj4Df7pt} zKU%Z5vot=bd!Xo=Gw{NZnNw%5q(_Rt``j(YTTtBxXPWe5cO4zSGIQ5(+6uTHh3@8x zAN=xeW$6t#AILmSiDPR zs-B2S<||jSx}VPL?vuJ7FYW{vS6AWY%(DhW#|JIoGj*ew$d77Eu>J1*HJ8CAkZ3#q zNAa7OEM`u%%AME!Sw`2#@s3PZtOQn>FYkVgRC`m+yq?hueQUO@IDsh$(~GOmJ&@?k ztnMwGRQ9rXVSnt{<)2T1H`zozp%h#1f60N*#13KakKh5}^g`GQ6*VvD-pt4MPR|RH z--J{ij3GHTy&OOL(z-E7nZXii;@E^Ih4uDcsSvQO?iZOi!pdbip;g<+CBu`yVNb6D z)=DAR6YFi@?%tY8rsM@nl!?cuDfj;x^ArAWGC#3F@$KG~k>68;0Bc;< zHCeBuu4nczxyWd;_~;qk{Y6uZ&eQ$$*hfeajlYn?q=4`v|bHF$|-GCgg(QIv`5Wb zGqB<~L=~9Uy57Q^*z~MI@xm?3zrrpC4ggh!@vZ&)3lKOK5k>euuK(+t{{1;IrRo^` z8r!`hFQe=D%~I9z9r!rGgO3xN@p01hgf;?=sSQu~@uF*^`z8XzG1c|>3$XEvZ(fnT z#a}=jc;4KNW0^+}nFI_!(sL1=<+>i9hAa?p-A^BQvRorDPeLNBj)#A9cQI%W=Y=~P zH0C?4m=9eJylMS;-5?^pX7r$chfk; zlS!-4)q+o>@ey#Xq7U{^Covpd@m8`=3-6#`SVOUkh9K}luI{Y^-5x{R!o|h!%F?3nNT>e1H)zi0A>t~$DG89lEGJa z<-~tTY`VWL=q$?Lu)36NOrCi?EOIV&BXb0GKV7(K9tz@&>wc2e6gzmX45#Udn@KPU zCKm{bNd_}N*7qJJoH+Zm1x0)0d2^F;L+>{S>*WZMxvS816F!Xr@|(fXn+V;?QfWXN zsrc!l3owRp=|tAG#^U#3}*ezb0SSZ!kDIacsM~gycKVDa8K^f;}Q} zCQwa7V0R3L$lhy+bI)KL0xnu!lEq1$*G?bzRiCyYmUtODU^9M^Bc~aoCsr4)MwIFN zetq%%_<<$sF8aE)_;&ibsrW&BK^-iD2KNXB;ky8uKN_+BhrKreuc|uN$M+$}5HL#A zBch@n;3%jF2?_I%lX)P7BtXE47?J}7LxRbPq9PRo)p$$?Yg=1wtG(J->q@0z~#t+j{st%(TT zO)u`_@l<3wfYbKkH$Ix*J#ObO(a@><{tu$5c=(EG%?%LtdCFFu3`l1_f{9X5d?Vp% zc8B41-w|rgxF0jH{D0n#DEUpPhc=mmv&x;C%=In8L=HK;83|&5MJGxD?(tXb%`;6U)WQv*wuZvOQUcq6cF0{t!p?zb_H!VZgPMqd9 zYF}4$CE{g0kvS| zS06+GBq@TaIqfPitNu`Oo>CKG@ zn#LeXWP_H>Mzkw`H#IbZpAt;nFAdxO@HC`zDqj0f+e-yy;O54&?E?kf*mr)WODRY? zQjrYRAwv*)W+Y}MiI9BegIQ!C|C?D}(O@b1X}BbvPp=-~hZP9w1lpP;ZNm>)QNpj; zvyEesDK%ZIO?x}oVg>NdtBgW(K zohH7MF*TxggsDpSPQj0e5r^+&@vXAL&b7jBgHOeH6h5WMQoD9y)~$Nw*?UkoIfGYS ziICK_+i=!vUix?ErE1^vEP!EYRBDspQ+zWlUm<*)@MViZL54@9mEj4z0OVAO&q>5| z@i8tJLbl+4uCb66ZcN6N|4pNWH!=~IbMAk@D$NSfcoN;r(%LJKjde?Pt z#jmIx($RJC3Is+`0*&cu>*lN{3O*I$G*d{vtPsQL&S)Nw7dkp&SGGg2Jf9Ui-yk+OPmb7p=9%ei-Nn_6O zFpm`s<&SmX-bbMwA#`JfnZC<;630@|T_b0n(#v%?!rbK=>q$LVFbSO5Dhn1*!?Y>{ zAKgvrA0$+m9Sd}iz?H1f6r33gkGhuU3Ns_{#WEdD8LBqsJ5l9?$6@&CNCZRbaORMy zocS^m6)fz;sFEIOX3Pqigb=ojomQoVVOn(OxI&!fq{iWDR)}&z#KGt`ZTj( za22(oc~pqgJQVx2y~l=tb=t5OtYZ;FdFCzw%JCUmR%jy5gcRNV>r2gYVu7@dMT{!N zn>qvmrSSRUN#JFSeepKa|km`G1 zc+rkksACc1jz#rm$GYH{_kLu@YSOWYK`cl8jF(s^;>@DYsXpQ&JJuE*ix_uW$4M;K zHe+2e`qWZ87C-5sBgP$T0z#BYRt*sZPHnO4K`la9%7XD zJ@b+g)gi}Q!Vxt(Lg!gXO(p;4I53K!$rG~K6O!_T-02FL;V|QM64J5vXlecYT&*IU zMmDKG?fPNHR9|+E4xC%qZeHAoy<{*Wl9u&V2;8Xbuyy~9n7aa z`j2yL<~KC+BoFgsiREOT*HitFAr+B5yX+nN+@TQ#{Nugt}{Eiii1B!I;da z#&Y2`nX5JPsUGIjJj|zhm^o{-cb57>-zi`-nJ?4KQ$5VnJj_!)%%=-RQy5P?@x2{3 z^DR2~bPw|x9_G_M%zQ|d6*9-3@19V8zs>v$&3vYZnPZ2$p3n3!pCuSmxZ8KUw%BHV zPcxt8VV>b(KFh;AQ!r)=UR6EyR=c0)Q$*ordYJPO>dx~_4|9QF5+s0IHS>iUo4HXl z7l1hn8r$BFY8J3=<^m5hXVY1sjiiP9V*j5I5K=#k4$WNXVJ-r~&0OeVo-G*8C0MC5 z{`lSB+4cNU%{<$~JjcU4+rvCpFuJLXN!fq>w9Wik%{kg z|4TEMc$iB)%q1S?G8gkTkKg@8n>no2NtuVa+{0YvVXhDi7h2IR`%ChlHuEu>xx&L- z39P#|Dm=_pg5jzPx=kH(F?gEwJY6$ad6=t#bu(9an4uN7>B3(#(w> z<|bg>wbAHdULhEh`5TvXzGO51O*60XFt7A5ukbLh5)9|4bTj@n)sg4Xyak6__9quZ|YbH1d-kb8BAO5K^(T3mIfb-pJpKK1h3Ig%S@ z(X~igPUZ^`>Sk{7Ft-Y32hME&2~Sr1+b+ewHFK+nd7X#3)x+E-7`|I#CwTX;&wbQp zJ}w7AaBUvuc7(d~+~#3U2nK>B%-@~8cB0KZM>8ip%7%vh|X1=3qefMyrs+h^vb)5-+7>d$Vl%XsP&-a=| ziqGSIlykXpeGAi%$60WK3)4sh*fc9+XhBK5IKL!bQ4$~Fvb**bC3EEtSD9)mbcgB; zWD2y?H_a2-)MkiDYW~)AuAfzD*@t*wr%|akzKFuZ0NG3~YpPwd zWNLED1Qt{1=q>H&YQ;t=USzd2Q%_q_4Yq&bt|Mym*@|k}q88ygO6jFZ)acn1wTk@w z3T{Wz+qZ5t6fi?;MEZKVlkNb%LF!w_sMyPuo8m$jGCK&~*s(s@)P0F7d~;uC{(MP9 zVEnnx{ZkUFu&$~cnVicywn75>Hg~y5k(hm9wa$iQ7kke%b@z3(J4)S9qOK%*5m>Qx zOKVqeM|YQwv`SY+NyUm4No*X9}Bi=nH&MJN7I!nw52xYchIfw;K6bbO_jPyi-VTm8BVxPQ@#>S|{78N` zFcUaGhvUtz?0MsOy~pqfj^uc}>cv4vK4s(Bex1m0+&LIG19OkYvADqPcD^nojzxF~ zn5W%1&mJp$&HD#nUe!2G`Th2?8I8AUQ}|{L&dOg}Ihen>z^q8eIbQoQKAOtd0L(6p z8?GE52j)v|oTnVTZ}=K8-_f|?^7jZZFQntr^2b+!2Y@+}9=PH1HvyPwZk#87ywREk z%-nRG zBk-}j-w()l4{(o;z{lIprvvi+4!FOLz{mW(8IX_r4~;$^5#W?uWp3Z2G)5u)+n4(f z#RBln2*}6%he`tQEe*(558T=Sd>aGuT?pLe0r++Wr2%4#@WyaK8<}_hLZ4SAcsv z0N*I{&4d;}zwvT3aK~xvaPmAUAYTl)q5ynL0`ipr*BF5B+<<&*f$Ivuw>2Q&<-nx^ z@O?TU-;KcC5rFSI0r|K$*iQoRJrR)aY2aQ6!1r1}zBhmy3cxpplWm9dljmIECTgso zJoC-TX#x4p0&ejLe4PJP1>{=>-1!0cHU#9`4BQm~_^uAfHwfGpM&RRzxL*b4I~r%* z4`!I(KLX6JN8noszUP5C@g#WQIKT93-}%7QXq;dBZbbYQ!2C$#hRfd*z&tksAEySd z0yBy?a&S!7FMqkfOmyHf?X8P% zL@Zd}Hg8?wy7{dIiGq2F!gW(8M`xB-RFoyq+j73LsEebpN)@aojb5hkT5=l;;UD+l}4BNsHnIikc%p?N2i3bw{8{RG@R#&Z#vFbh%X=K z`Qj_Wd78u}CSQDu;9DS9<2X~#WgF!=H&vSld-KU7kyov#xg`|KyhcLUC!5#NnC-z2`9ab{VvjazW$k!{?D^X=lh1Lr%% zcNfmz6yLXS{+{@F{-OBp!TEmi-G}oY@$JU>QSm*D^UuY{-~8Mu+xQvI{DdjncoJuR zsFZE|66Xf-J&QBfgJv6l!1*`gdmd;0$~OLtbEEiP!I>WwWsB)IJ|@jJ_T&5~@x6)j z%i?<*=Y8UP4`(9KuhHHs#mD~tFY!?~@G~LEAAHT?%Y$#V_#*KATYQwqHR78H-`V1e z!gr4NV(^_SK1$bl;^VTb^TkIwTPwaI_=dzc4?gB1+gOA%KTpXv;_zJ{zH<0l#a9jA zI`P%P*CxIO__)>`@`rP~gyH0Ixd=HLhuYs~y!cEIH==QA<#=2!@v*S20kbrmOdMhD zEBb0re&3`Iu6X3J6hVqEZgrAHnN)enYK83`ib?&LN zrL(nnqcy~2ER2~K7G|1@L6}tb!|>bLmkT&$%FYagtLzkr&%`o2!)L@SBr{Uvit9+a zPV}6yM!_s3UzZQf-bl?jZ~NsizUCLVY7|m5UPjp+$@>8k_&A$?2$Lv9k~> zPE8B>-z?%)@cUk*rt`gc-EbGF-F#zG;rU*q4)ncv%WxN|AAMs|W%^#E7WKXOz2PoW z*ZRh!`o%>`kzMg-k7Y~y#-vjAy-2-HanO539fqHDX78br9_BJN_b`{K&V5t<({LB5 z))ABH#V)OxDQbFOS}K3vm>dOsV^a0|#-u*;y-3yWOH17i>nbJ5!jdi0BYCsybes?k z*JHU+-Eh}ASPgfb)2GqKUYzxQe5}XAabzPH@6>Q1g8wQ^Jo=;-44XDn`tO&1-ZyPi zNYA^i`S-_I0SzgcdT+w!V+})3!2rVAJ)&NPo;sgKO(QY|Kix`_6ENkn5T>SUw534< zB|5?6%GIz0kVjKgxioJuu?asXSZV890NfzJWKHhE-)xJ?4FhZoEPQa=1mvYDB{u+# zsgH5=U)=~>CJ)0PNI&*CoQf1@NnWVlX;ws4#76v58ZKLM#UULAUp8T1#aD32NM)xQ zrn8`_Ukp9Hb`Qr%j_@inM^5DqlgM*bni;Y#gj0J&e z7rX>CmRQ^|&1~)mIUB!68}T;WE6wO=AG38Q#xC}k`1(X^az;M$twWq|q#2qO+Ksc@ z=?@+`%@PHW6}s6Cz%S>bG-@BUxRw$%>5mUXX_A{xRUh*b1($k1Y+uO=tpTuE1>kJX zG%9pV##X(Zvn%Cno>&h2t@>R80MWAW|3-=f%y zbu41sv5u5jW^K3^#ePi3BF0@V&R?=ZoPH8=&)$E&L4Yf{J|44-c(H%bCo9~=?VFgC*)_IkTaBXC*%%K$lIQf>1u)u zCYIg#2|sT@?Y_*UvP5j0BO33A?FCit1>7q%^D!P~j{9!rV?4~q4#V81nUD1_bK2x) zKGws`8G^mA_{(SB@R(ugiyJiaaUN!BLO1hq9%jyD{A%O7n)!GS^9dg2<2}qL3dR(; zOWwb))XwuSHS>ucX6k%*o=@~JpXAE(8CO>wu$hnHU;=lNhxufLx|vV%F!PClT^nv@ z>=G;PKe4#q&HNF~Jjs*i$(}s>E$%nfuABM0nt6(cIp$%W;;D^O1(TWiRn7ci7WZdn zK8XW6+*D7VryS+tK3y=Gnd>z3=^o}YJj{NJ`!h3NrkVc}i~HRzc&BFmFpK*$ z=lM69`NJ&k&&)iElPowc?sx0wSqOEvpx@&D%*?YiGZ*)}nTtHkevA7vGbc1N7x%lF z=XjX?7WbRXlaKh~5?dpEN;7kDzngiUhuLp&zsc;DjfXWe7x%lF7kHTc7WZdn-mjUt zxZlmZ$iwWnxZj*+UHs=IKecP)6i%h#7JHacWofeEx41tubBAW;;(m9Y;~r+e#r>I? z@7ByE9%c+_X?gZr+@HCg|EZbFJj~@D<}#12s}M|P=1IKyfaBtRcWqQ6)ZGXD7WbRX zZc{YNG;@`Qx!S{A<;io6U`%GWJnz!XH6G?#53}Fmev{dq=Wl9eF79{NMxBS*Z*jlL z?9TJcnwg9H-OTkK=8+cnyYoDnlUX<}?sqdcAk^K0evA9fJiD1s*UVhp?`CfDF#9d; zH<{hF(WIHVxZlmZ(!=bxxZk|hx%TpB-ZQ|W++~`Xi~HTo%^qgI#r@{(nS1{HMa|5` z{ch$p9%jGA{h68fXl5?%cQf-Hqq_zD7WZdn{<~&Yi~F5-K<9aw{g&zTwu-ge_SOwh zVl~Ty>YiZ<#(H0aId@9`|ISomP`(R?GBp*|^A+7DGPg z339nYh{EHm9rnpv3yV8}hbX|2aq zce#|2fS(`+7TBe|a^_MpERdC#x3WN1t&QdKzKZIGIa~|4hO7OsmTi_=em6IbVNNO6 zTIYM-{|?KnR{LR7h^Wu10Z71UhG!t+H=|ZN5RHYRQs~a7wzx^*_-DG)UeQRH5vTWtDxPz6eCmTxY z+4jB3)}CYoR$9kB1tLmTgs$JJ7r!z>+r|9aY-RVVUM$;AFf-cgu=7FM$S^bI97^^#WnNg z_+TPHR69~-XKS(xpC2AnB&Jl`-O+W>k;+=P98{cT_#U#S4&MqU4=Nh-x4NSp#yLi= zMY}4nxEEhpmb7o`>pi&Su)w%e6x|^tckuB_JMrDAsMLcg9P_vwh6-S_;}CLrC^0L$ zyMk6@uhe|Ne62@G0zwnrEOtO}vZE6pq&BoBA#z;-<0%!vW%~WE2>;&@~)P>RCQ9;jyf>_rd@Y;Ala3 z&2|22mV#j_kz9dqxye=8)4lmWM{H&DLu66am*h!Jx1eMpk;?o56JWLz?E?5uCo@Z? zaYiwdF>C05FR4OG13$JeEYA;664mh(z90~ulFBrci1)x4$ClO}e&b)&)7=-O`=ZaQ z=8%>U%P^KD3X1U|P%=MTT06RuhZ5PGX4&!^pdJv39k>#59BWIq^gu|`^6OQm&ZG`DmW7w;N3cSP)UNkV)_v-L z&9jNX=y{+FCi|2$%#bhIXZbWr%38 zcr+|t-GbpRC@8tU0}2YK^)_k{yF;gC$30I_B4Mf>Q&oth)q!q{8+aPa&u@2^8d09=0RF%t0W7t^KO)^SL)`x|rC(zN= z=BF{&h|VT&26en ziSq7CGT($c2MYgLDlL^^G+7yF<}Z}cuvD~(q&0`leCI6S;sWo(5wWONT##uJE0@ri zGQN0YnpX2lJCd7QxA@%N;t81~4SR43SDonCurb4ZmL7jf+kTf9~YH(w|VCeL_luWSP}nnz_ z2%iD&D;mpc$+Q}mADMkCjn8j&?+<}{ECAm#0r~y_+-m{&4g};I0&bjsQ!re4kGI|? zpzv^h<(&-NtP%Lwo{IwV#er)Gz;{kSzO}%0jljqER$GDD?!ft#_Znbsbl@_{3*T0K zS!3W8=f`(9a6cY_k6(lB1?DAdA1T7I9De1U2~4pAm#IB&LHrtEUe!2Dzoc2Ggd47&PXOi&jq~HX4;)3n?AJKIa?ApbR@j`* zuN<|&oujdS>GBJmc3{4!al@74JHTK=WO06c{Mzzo!2Bfu-@CvZu9vX*@fCvaSYWC( zZn*rN2TbP(e7A$|VvUi4;N&NNC*t$cGjY)Q<&W|*TVn)>lOJCNaH~e(TZZ^8z}%&A z)L(vlL978$AJ7_5lnp~a4nICx?kU$ezw$0X{CZ%n(Kt&^+r9nhTfpodfo~1?ehSRw ziSWP;$5#u?IU47ezc<0r4$K;UoD0W~3#Ggn<|TgyW-KcR&Pq4Kykr(IYc-Db=hxqQ zfT3khI=}q2;IoqJfZ2Dd!p+9NO!-@c@b{-;KF5zu;rK@$%8ICf7z`P+a=`G0X@ z4rl41G`X6KYtLzn0CCDx&y<7lXPF4~-w!t_0B#H@rf0&X)gSxOY~U`^SoU*CH-o6@{hh{(GclLIL1*cgwECkQ)N70YagzL{m4j8>4BS;3 zJDePR2AHpCoL@PX;=;Fpc{g9BIu8G&92x56lLgoh9S5BsAJ^}G9hjeUf&yppWzf5A z7}N(iu*3P)OBC0>tue&WWs(;T2TujS%>nN9Ot=j7Jf#RD4&Ddf5Vw zD}Z@ju8_R*|9Fo-jh#oK-*APqXud|yltpu zty?~{Nho8}&_*^$`>i}TG&als!iO8MGCa5azZjVMyK8s$oV~Cc#c*tyetfgJDLYn_ zx9eTYWj%P|ZkUmB2XV~ed@@_MQDP6u#_AI_hlz;gpCj-qVx%heyY>bzeLGeAre`B? z&KRgABl66I<6H!*kuaOak!?)I8INTUW?CSbeAuUsr_}j5USn^~#o@I3!W`d?;{_ZP z+oN%urHS~Ih;d-GmmNtge84`zgL|>bv9=k)EGj1m$s)}>^v@5EyJ7bpUa}zy$h<4a zVSW%+n}X!{L8wt_Dp(rl_>@l$LZ@V~iCzY_i+T+4tPiK|Yy zVB;W+yir_N7Y=R8*~okkWDnGb2e#)7Y|niKD5L-3oPo-`!rg;4Myfe)U{PMGK5t-K zDBQn0XEB?7+pB}k6Por`ipiNF%AnCgO9VN_BzRZih{$;be5xk-)FZ1VZM43}jbE{$+D{G*LV zu;;8;mFkQ|npYS8zHn%uE|xdAC4A;9gEtY4%M<5Md^=e=f9-pHGj&but$dFZRxMd`s!TOmkqYORV!92)rZ>Y?~KJleRrzL$rEcq zs&c-CQ1YJBQ9N8SbRK^4%qvpB{zZ=% z$+J_*N5ZxJujT;Q`)8@1)v5P){DlSG@uC#>-H)_FJfdgrMM)#6q5ef57|AlJ8dwl% zYFOoNXF#XJG|0Yb@I+X!hQ>4muC6`*p*&+SciuqV2jQxP?{5Ek%efNNgH*e5WE+>` z+=3%w++c-$!3wMCx)?8a+oNSQ<My zhQSgs4dXsJv%U`JpkZ|47;UU*UJaWkd8ywP9@v+KPTs%hEhCwmDt{~7ka}E1w{ph^ zBCRj2){-1k7Rqetj33MT23ftuku3x)x>6J;!lztV6vbuup%ev`#F0u~cJ1yv0ri~Qn5qv;{tz%mbO&`% z;clL(maoDQk-aCBkHqG*5t@jCWbD9!1RC=w2sxCZJgAGI!UMaWPEK6-uPY{u`$72R z2mg{&dHCD?iyktPC8?DUg?ByO_vijgbBttd|NEo1RX{SLdq*+9@qidD_4Ip`F=F1-v5oR=!PW7mOXf!!$r z=BT3o{qVN?MLX`91a_6PBKTC!is4f^tANkW8K20BnCo{9x8nEc^jR<}iQ$Ht2S@Zg z__wZka31Et6A6MaiJ`h~ zYJVmnL!H#7>T?E`=A=a2a#JhvV1G&JqJyq1WF}%x&(V}H*aUsRhPfL@wrn}6=HqNn zJ|l}5)i~cJK8`3SqRJx1MeuzcN49YZ&UfO77&~!R5`Qgxs-Ag;V{b&PU#gbbi{Gkc zo`z4g%(L*R7@j%*{#5O2f#>|+0?&t;^M6g^Q$2iJd^j0z;^3rol%XuEdVh#AWDL3^hM%3vd8T}7)9+6-8 z`+=Kdaa>%uCwatb>kdn#3YNPfjWR=p`L0DxsVDaC6go~ttL@r7 zZf6UWOlmd?V(iOS^MD`n$KcKw?Q0IU$Bb+9797=g!h&a#M_=0zTF@BkJF zEqJEy&xO199d_dG{%404?&+I!<+fPS%yGN!Jq(QHv1!Q7Y#0&#x#ZzhT7yx{<*}lG zlsXfAM>i-f#LB41ef4aM>LzA2AlbNGn^+)BJ{nYA)WsG#D_ZhQ$vT`K9dlA*!KA|s>_*e)gOXpe&_90`)s0ey>eS_;gZ4f+`_(d``-y~ zYd-K`sIL)i6LYrBgrQ&eKb+hDcBpR-TT->bQ*U!dJ*c{%mVGczfc(=!_q4_avs>*u zN-ErWGv(h%d)P=5F^5o%lntM=v_Z?c>+i!h(vNV}Zld7&W8BUifbV(uB4S?d zml8G^O`yVN!l%M+VzbEAdoAC~@NJN|@4=^H9El?RLU0q{dt7|$;8RyGg6~lYd&mlV z!U~&T~d^TzwNhmB#(>-6v_#TBpk2^VZd4N1M25 z@bR`MV$6U~O$VFc)U5_{;(};Cci7C;Tuoq@&&oJk zM0t&%&%~+X)id#z#mBgO)BiL4&oUMs%irvN>GNZ`-@BDp)s55yJrmvr4R#*pA#xYA zdWGnK)GNDQAGhlOup1e{p{YNUA?zwoSYOSid_}aMQ^#a1q8^<>L*ibl*qp$ak8{ks zcMi4oozeNcHQKXcwPe9D&_?8Sh6k9QV&Urpow4Y`e-&n5G`CHKu-nSktY0fmPN_I`v4VazfF_ zy|8-Xq;%{|1gTrRIq*?RA~0@a7$4xsHtKMGSHh@^|1Dt`;H<(n!}peiC9SZJz^8OJ zHFXY-h;h5+rR@$K`{S=?J9g9|yUew@F>Mx~zJ> zl8h}%jo-wZJXo+Uowt!Oqyx-jS%;p~PhTTn4B1A_p;BLqI`9_pk!_9?&^WDL|MK!bbRVa70A3mFTfU93?TXCJsI| zb(tf+uORFQ@qHh@5**pak8xHanyPr-HU5=8pQ`=CFd{esG1U-v5`4#k*ZFK@Rc}I` zg*ycT5MRe@Y~Wnsp?HrMA0s@6gC)(<&q&7L3ZA8_N5RFo_oiL=_!&c`rlGMtNzBds0XfC{ueLeVMT}E%Rz5zzQIFJ$;kz71ws8T@>MC`x z@=?&(812;-PM&$#- z^nUN|^m%&lPsXODvT<)TZr4W<-}Oj!8ubBL@kn)C>f#*h*_RsV&Wpv=l%aVAfKf`Y z2t(@aT|<4xtWZ7JIch_JtW1BBEgd?~)uD6u^uL|cSBwN9JF(^lt#7pO^m%W)GjeQX z#vQ5W%A6rRB?=KgAIO$2s>WQls8Ssq&+ftzkqv9qINXEZ6kp8vah@)5uYs>c!ZhKHws9PjkA&cphOY#{2M{CSkP5ufkFlxo#EnW~z37U=>5#_)ZmLzL=}% z!qgON_&9CmTCQk52D7fDVP2;mO24+M>%uN9I8)=FIT&&XLDnD@J%me{QCCEa>r6+)Ozl8{DXe=*0+AeUO8R>Vv$Z`fodYs@>r+w(tZu z%E%qX{~TZrbz1|D_im@nfKg150_rMsgByTfP9xA#pP@|%WtEOD+;FCf$4FAi_@8A& zh0Ffd12upU;n6Foh|LO}rem%B>WV)qgVP9*oqza0j95%hZ9yd-i@96<#Mw-X^=Ue( zDC6V!c{mQ6hl8$W zIhiR(Zsr^h^H{+UN%za4p$?mwPqFC6dYDuj^V1Cd5VXbv-hmfeK@o1-(2wY zH*Drzn)y`4>?kS6yR6VGoasLK-(UZnUD7YyPZzFVW1?t<-O{(n>GsS)R0}d(xUA znA>rtdw9uesIidxVSGn3&ycj7rI-nXyAEe~nDZ?R={CMJz1(JgN;Btsm*jMFGFqCIz@CPquf6p$(>6&?thk34td5(vf?*_2NmS)a5`ox7cbBSi2 z=V7M)bmw`Vhncy}3cZOlXD3(nzq{IIZr02T6tiQI36e)F_Ij3d(RnK#Tp-N&VO*hO zEkrEUiGQF&loloCRVzfb0v_zJ;l)wr=_VtDBevpk&T^q@k-Br1Yp1>nu{i4#4F2;Y zYWb%_oHD-{7u@xuc$_oXC4%8=21>v=FMO=Qt{=WzqFdsrAKoivg_s8x^pxc{Ube)l zpM5%3vDA-qBel51qE@6^zUIYAX6-;Xak>o`#{rpl=;soIWQ90urMvLF2cEHGwd+{K zxMP(fBrC)=r@JKakB``~uGX=LamOk{NLFYnqrhGLug7syrCJM540J4F+_B0Lk`*#% zUz1iHRc*(5S;r#A9jiiO9f335*fCH2(2kYECWa%%9jg){St05`xyXVleOJ$D6S@lJw9 z`juw;EJ7&PcF6BFvmJ5@0ou9S0;&XQQUB9j)^_c7vzGC6PRAm~9jg%`c5iy}w~f%) zW(!`VV-e$y)#Qpb?&Z9GJJt<47BPzHzpXq+(|A@0kJ;qA|N6Nz%s7VegpNgw;`y74 z2f@ZPD5^>LujR806TKy?Pm~WMqvkuP|p6MFN=RbB1k4Bed3WC9Z zY&V>n|<(R9qR&IamQ*!NLGlmM7lFJ+>Q=s#`=|x zMT`nN4w{**tn=*9qU#Xq)}nSvTM&z_EExPZj5`oQr$U@<(S}fWTX?s0Xcx>DoT(3M z9)0Mic3b>IGq`WwMzR_a&+(E#}M)wr;KLY2BQtR^UP-?j)lbQB4^y5>jTmqicQlu&kYm(J5rQcg>GxZ;h2N;U2GX-pYj zhR{ed%#tSJsAy#y6&292c}q*nda$$!mx(i@TgYOVZgV!AWwfop8LC91rK(}YN?2|0 z>bMMcJ>w!aYielgu(%-oii(lXH#_lo32F^_w-{-APG_;Et0M_Rkzg!?SaiTj=L+>* z1DkQf=GIPpZq+6GUSwtxlZX`OW<=|TEjtqi19hwTLxorHJ1%YYFwxTkAZ^mEE~=ov z47&zw=;n1)U->yKPfJ<6CBL*XUQ<@nP+!_m1{-;LsbTT#j;`X_`U9%sSV;+X&uDFL zFT-b5$|&jZIjE_T3S*3#@?J-FaY0q3Bwbz>udb~xFR!RBiR-sy#j_Ekcy@8Dtfn|t zU6)^6xE25F5i*~l)pZ4SNUXAsA+w4L+mSs!xUs9kk!GeUVspX51St|xASwh>jH26d zVcxtPSMg76Ln2aE)(Ts~B9uz>3aqU2x6XQb0(vY%-q{N*yx9fX6B%m(!cJ&fdJqU9 zP%IF58c1~DkYy42G>sZ48r3W7fTCU1*}bl{vjML_H}~o;D9MOfe5?ATLN~aeh3tT? zkP@%bE>)RysN_HyMD->%+6p&l9GCVD7750=dwLVITr%vcW~X^*&-ir^k!47eu2@zR zr?k~BEh&xbuQH2g%Xgtl6_{Uq7SEPXLyKpl$0_}>EM8e%TUk}vP#1T6C#rRZf-H|$ zmey4*FRy5byFMRvfy%1mrIpL78kSeq_~n2v#jOlQpXm{ng}zr3=vv?dO%RS9(^+EOc5 zaFsRG*VfcGNZ#BWE@VZ#rmkdZL&@@GI*%E!x`VeSyF1M4pHsiQwxPbN1gRIuXRogG z=hiGOD=96lZHPnixNuxu)jYkuZLMAFrQ6Af7f&DGAQ6-bt$@<6#w|1DYN&H`sDqHf zv~G29FV`({-6Wl+z4*=6-e%46#}N0gn9t07n5h)Xb@^v%5E8 zN>X`sytbrbdFAqD6_^O{E6w70$>Q1kP7_1#JUtvIWjLOPaT~86HJhYgIF^yu7NRq_h?)N`DTjqcM-n zk4zBV`d{X6t6Dm`*Y&OU4j-DO0&oaG`F;DX=OusLwS6anq`=(DqXDv zts++@KTKPt6CHZ1xtXl#j$;O;s!1k6o|}n-Zg2BO>_5@oHkV`4fN6VG!?I<|D;@K9 z^D{U#Z{UY;#k2FFDDWwqOAny`SC*HQ*VLEPIwt?3RCw>p+fa!)i~fGj z)J9${g>UJKXLGE_$8>QK0_#5fp!zFX&aQzEDNHV+4<$?vCR&{ru~D*RT;!OVHH zT(-zZwopF1XkL_#7Rt{R3*~Ki!W0eR2@G5&3+3j{=n8>z1`Fl4Ab5d(BxU0KER_Ea zxN`j{hz~~nEcJB)bA39_@mP!L@X_VHz`U$+d=w@Y=^P)Y5yywY|JE4(7UyH3{AfIM znv8>v)so4=G4nlLV~C^kv(%RlTzmw+;}E|#AYUtR7mdKjhi{hyv%`V&%U=qZn;f`I zn@089je`n&_6Ttl2f%B`sFuoFs;Gpy4 z<74rYfw@fMhO57i0rSNX_%?&@4q%QQ&s6c47l&W|3V|upIKTWYLi}aG3}_r*Yy0v2 z2$;u5;NvT~UjegU-<`nRI|AP%#D5r=mmD}h zzBhmwa^N!cw>{t+1Eoc)-E=I6AK$NmdD(%>#CIFw@7Eae(fRS+a6DdC;h^)YzuCC< z4Pah$;QaVr2j+bTE>r&Q0pDo64u1d#-Ei&kE-;5vAmIG+Hy_uI1%_6!>4uY+b-?tD zz;_c8+6K&V{2CFC%_rq`eB{D#eo*v2F!@xNaF*Ps>7g08woYRNh*Ks#G!5aO2!Lbx z?#YD9G+qMtvc@u=q?gD6Wd`aW{>g8^v`!!&iPgQxd zfFtC(064xF{c!*s=M9erz@bWvUj@V+ zMxl1NO!YDr*JlU7+vy$mKeUK_18S}L!&}70V-3EM#n$y*9W;yaq0M9epLJ}? zx{`MGAZpEY>)1CV?7KJ~#PK!`nrNWggoAO?tYepi_b^Odp-(wZ2eI4|OD$7luMO?o zog7^+ zr%4!AE}KT4bGdjOtL<~Oc_x~R6eF#9SRb9AY7Vz#J-T)v_s&e9%EN43t3qYr5?3HAAD!jK;4ru{7yCJ z4(49jzwM{6zES?u*!JwbGRE;reQx2jJa&XEl^EsYPy?2O==iXQnGG8g zBmB+m(ylyY4;IiX!(wxO;wm&c#P5tFX=Cf!wP^c;95A1NFHB^^t-4 zy!6yzeVI4n%W*`+#EYF1KGmTMX`9CN@T052#52uRGCKp=@Z_O@$tmblk{Q@rh5m_T zJ(l%YV-tioETR1mNA`^dRyrDtL;x}oKcmRjVEx3#0hoiYjCis(QNDdvS>x<>6%Mtk z-_GP_gwc%_;~MIVTG3N}_K3}155aHLdCTd4WTM;ru+n13fOiazh{5|#R!78`X8AbR zITwd&Hr`Syr;HAtgCC};>WP-AYSU=7HdWmQkTM*!PJATLxBl>jNAY(nj)N}HVDm)X zcd=7IZYViMneu=I4zZ{omM4-2S4j2_RT<0`pIFghO99E{M))D6V_>9rJcUCE1B{d8 zhy^J~S>bM+IP`Vlkd9(Zf{#w*9RJytQdFpBniu>wep8J{`ri-r9Stp!mpY0n_56Xz zHMG}{{R61#^I%we*JIm{fgYr3k@*vnIaU3;r!9PE+nWpD>6@IYj4XV#Zvs>xHX49J zZGx!jhKD%jQvXy!q27qZz?eH2ejsZ%|7f4TId`CQRIG6KuGhE6kn#lb!_LJO$EBw4 zfGL#0$OD6shB!bB)18*Jll74HfRr8k%3eB)0uk)E12P-^5%n(^nifIQ{y;=^InY zZ-fVm`ay)UEQxJ<@q87ZxZ8Mw%TkY*4Jti{KC-&_0I~}uG`}*u{ixJX>PUP13~&28 z_g4tZstVPcNvQ7?EcJ4Q5R1KZs1}$vnP;p{7Nv|-4uopDG9iN+o1Dr{%^Pf)XxY0l zE#IV$Oof>3urhcve|vcQsmRFq{zdm1gW-FVM{BCFCROsts)gIb+y22+7*N4m+G{?{6AB}OJwbuL@X<*{~cfu=mRHIt{! zvik}oVb|+@$9v4lVEd0($0FtXjVm#^4J);@3iFBSo8pbBXA6}v8VnZ@`7H}S=*!y_ z&N|R++7HT2J&SqC#3tCQQu7bX&aqg89fOWEaUl0c`zCP+Y8tExHAu!B)3V6k@Q;{R zCK*GLRgz!Ks~}mQ&?b$nI!7UB15Yf{b;2TD6;*&l*c4ukcG#YyO52>1^>o(LO)IRv zfc(p#E5_*ty4)ih?ai453X4&>cH5GUOb6?%iO_j_C=9$gaN4?=gx_jvM5WB$tgOmW zg+*jc`mBVt>j{*;9M8E3`v9(*b; zoA48Il?J(#pwS{v4#FbF0{B#FoNB32y8}KYhO`x-#?nv0r>0t|irdtParPcG9W2D% zlB&H~+s^SZOnDfRQsdDC_!P~lmhTMszJw!NHg%!e#qLP0?a|JTu7qrK(SC(&X@M^g z?OC0eiqmG|utAD8Dc8LvAvP>MI59G3^c=L|oR3Ss@^HRId^j0=qR*SNQO2xe`J2s@ z-Y<8&Rt?mxyo|27GggjYuHLybMhhRhgWeqL#E(>&**DLNO;ggkzi>zicK*V*`i@_* zk$eu5OYEUNqu4n&@_izVL`~#>iM!E=gYsEzZL%5NaEr`G8wR$;s?klh#maHi;g~0Q z*m>hPek(G9u%aPYrb544BS|)DLt#)9fW!fjt}WMG-FnoM3ggTME{rf{R`wZxzK8|m>-N8ulBGWQ^Wop#;_eGuxSBAPdl+rRHz zSYJ_B=&1KW=stUDvjZIZU_oHsB(-v3~D z;UnArf$ED5B+rQTKQwIsU`E0qKCNeR9Bk82P?#}C<|Z_%8&s#(gR0JFbDgJ}>lNln zl-{^q8+gmMEjCS0fYX#;K5XN+qx$J!t7$pYkl1bwSf3*kep>?~AM=pGI5iz59d>nowqW+YEdltXHi6dL=^Kq!omfZ}LntT_(m6|*n8B(|t;8VD%@G0C3_!O=I zzOM@l&1===!|)<%2cNc!y*Wiq80N@!@3fbs{S-q|Ni* z4u85*ZglKafqP-4d>x&LR&?=%1?q3Y!ncy=nK$rDoHy|5o_U)0o>?Xl+j9rD=M8Lk zPaY(FV5_S!j+oRYdh)g0=o zNzL-*q8>$1Df^CA1G95#k!h12Pt^#|tB)Uch-K!IdCVkS`)=4($>)5kDluBS_A42= zI(N<`HEuEN{SXjf?kB{C;uAY(Lpk?D2*Cdcs$1`ea4o!?g{VC->aZuq<<|BH7jfjj z@;=!QVaec5`QLXQBBLrNG&~Yw9?iWGj%5>Kq{m%s-~9QVu?ZJjmN?B>P%g%5&Uhwl zGWs9-fcq#cMloa;LN!IPH$AYT_*U?)FJZXI6ai(?)h2uHs1|wkB?y+Y!sOXyVDbJm zVrLc~Hbx7s4zoW^fcBt~XFVxp%X>TKUoet7vwx87eFvhWti1EkC-vKRDmWuo zE}FKa@5D{UBjITVwjSYIlEvK1vq(MV$kZ#+^^|%XLDjt)>UQ5IwhyXcQQvYTFr9rK zzogIOf8T<_189?lsIp7qcuYDCX-#kLfAE9G!5d6XIxO9}fg_*B{MgzqT{`!0Mc?$6;q51mdds3%70`JmhnhUr85&gmCho|R|4O= zII@jOoYg}w&r8g8>(h2YvG2I#t>*c7fM^<*mZiG1EGG}Q=#+X!Ub*m+@U~Y{_r(1W>Gr5fMUFKzbYbq?;nSu!H79;(TWeFS-N zZag{_Sx}=^9KL!S5oy@T@MRkp;;crf4|ijKoTN%lrD2@?1($psud%-zBk_4-&-s|@ zC0F4WR6HJkbKJw5MqE)Z8B+~mR8tNfc;d4Yyc$r?Hf3@GOYhW&s&ps9r%K2845Je= z{69(f;%(iVx6J5hAG38QZfDsi_Zl`Sptzalq$O_#; zugf`YO|hqB{htMQ)B=>Dw6o|AgMEpPEf2d^jzw~m3fqEv#mx|#hfxU&XG`v=QPg}61{A`Wy*35ZUTEF*Ai(1E>mY?1CXTZT)=zsiOC<>GCAKG)Y zVV3J;Q%wM?yk}VX!kV@5pk}81c;)>cD=o>hBP~k1 zJFW4aR-Paj4(6m;@%WwSxn^1+)$K7uGSfOkhZqv#EZ6a#wEQf}ZzdAQGgX(awbLrn z%qIwQ%jU%9wk?+eMaR^gX>sgum&?zh{30N!W1d@e%mO>DD|K47MS0#knQjz}aSdnx zn;%@dQ}?qd&wR308@@UUjTzDj+^5r07UdcECs*nW8FGa<%YF*3x>NVFI^O^!wbINj z-@Z%b13!$DIHbcxJ+(Rsp>F1=M_MKehR6_(D{m@lw9BUtS zoz`SeS~0=w!I^30PQP-Noz^bR9P==r>S2y~m`@YTZ8+0Ce&C6nHuJYM^JyMt&eq&{ zKFz~CO)#9QGtYaso_vnY{720^&BJ`UhuP1fJYPDpO{ZMn@|?{q*+8hWDDRXO>JWFH z{jA0Few?y8^u`YyvTEAop69h1jxmW3Kxr=8-B6MsppD7!|h1mj~ht9y4b0#4%7L=C2oYEMipHzY%gceyNf= zt*#ad&vcEX)m6KG$}q{|97-_wkLRbHcEPC-r)(4<)GZr|$2lLPBxi;A%xW@x2cEt1 zGj>v-RB`BE2IU*SbgFLxUn+p`Fgv_9e=UgYe=WH$kSenCDv&;Q$>CHiv53DWVP3p9)*_RzU!L&k6 zj9bRa5Mpb9pY4|7-z|m4Q9Wm}$%;DIFF8jca zwN}R>#vQ9tV(DTV)%m}5^uZf-EMnZTsw5U??sRRP$D>uua^0(A5#x?kjgYJmH89=X z&m9@HWBregMT|RE4MOZ#dnaA}W-fsK)l{ywNil^Ph!z2bgA$KBVBCcqecWAbHgl2_g)PQf|@r%y4`_5kw zD-WT9!GA2=;w>he3UT)C5d8J?=A~G{s6Pyr*ERD>53}H1 zPeoRGn47_n6}k#%YOU{`*o;awnP1Y(&5GGEk6JCUPQ%&M>b7XxW;qz=zU3|~XuFnIWX_P>=)Vr6bl8AYe@U2Ut_GO;VyO;g=vczZ)L z+@?We+q^cT>WjnL=>Fd{!wqB8Sn9Whrk0r(*TQHq&b>w~D%0YiY5p|X)5S*(#er>Q zmzBgT%B!mDOY2KB+K9DYU}=MNV&K(GO&eQPhG8=rjcwV`lW^Dq&sYkFo#)}Kio=?F z=2~!B6=Yqw%#UYI62|W=iGW4w8kmG#I*cq8kquAPvcSZ~fZ`THk>a|&Fn)Jquei)HtNg$FnQeT@}w^+iHNqzyYw!j(M zwyf1M3@&`SN4k4~r_gpR6v}heZ7!8X-Q0R%!Zf`)Ov$u8U0UxKBa5(WK5XG^`@5Ey zDT~6&IHI*P!-pWl+UJZ$Z)x?ps$zLrIn7VE!q6?3ozT*}Wq-b14Bp1dYAr+9c3H%9 zavfsO(7xC-rMYCw+N^Yh78==ysmhAV<*=?>QSG#?%LOYiPw80M;;^X8i>5YpkT#T- zi{W#nM+%mfmo+q0RaeA&{OqM3a_xJJ+a5BL*U04|QYm@T<}U1Z$RN5IWD3oZ*@*KY z^Vz0Q%gf@WwM(n8lR;@PIdXmzPs5~QkhwS6lkC3GG{{_3U0qgQT3%Nfhd|Cn^VS#7 zahXspg9+t|hU#UdFt_Zm*sP?=nE;K0K(aC!Kt1HLBhMZI`7mT&898(|QB?CvJCeaf zgj-U0B!jx{peRJeIE)n^G(lR89!h*yB_2G1R@YGN1(^mRF)C~BJ&>AB_8TcFi96D(EH5o7uSb}*eTiew1poBv;#KuaORJYx%AN@(&dFULZ>Xs)tFJ6w zu66^+gefnHm(^F-)|M};&Nv%gx4sQC7`wP#cFs%UwH!9;m)85_+%M+*%KEbM>dMM; zZfBqqaOQhiyuNfTKTjp3f_QsFLGfV)6*I2mr!ghZ3d`c8AH*wJU z@v$D}M~SeVAK&6AY)0dt^W)>Q_SI1$Z0E<<9yN?44mv+RzERsACBk-od{;*ep9-#3AKAOPQE z0r{Q=?u7t+uLb1$7jTF1$v<2OM<%^niSTh6LmZu-{H+2mF#;d;OLsuNUf}uz@C^p! z`y_C;2H^X8K)!DR_do!?#{%;G9JoIQ;QLEJzJ0*GI|AR)Xph6DuvKm6*S^OAH&tW( z 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πYE{s<0Ot?BQxUZ|`nof*YH$^LV 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

c72cwBPh{^K0Z-qg&(wT4UWG# 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 NPBK890<4-Sr^p8dz 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�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%0A%IpgR&=7!GDJuRFj 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%0D(9BvhY^n5y|lQrIKLD_krJnS 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%0AM0Hq?~`=C@L zyb(%8!Vf~JNcbTr6$w8ACDi!`r6S?YP%0AM0;MA1txzfw-Ug*2;q6c=65au&BH@>z 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' before all X includes - - renamed files with multiple periods in their names -Fixed window resizing infinite oscillation bug. -Fixed problem with string-type (as opposed to stream-type) indexed - color space lookup tables (which are used in inline images). -If an X font is not found, try smaller and then larger sizes (this is - useful for old or broken X servers which can't scale bitmap fonts). -Added -rgb (color cube size) option. -Various minor bug fixes. - - -0.5 (96-may-23) ---------------- -Fixed bug in LTKWindow which broke the remote server mode. -Fixed PostScript output: - - doesn't seg fault if file is unwritable. - - incorrect DSC comment - need colon in '%%Page:'. - - use 'imagemask' command for masks. - - output filters in the correct order. - - Stream::isBinary() checks the next-to-bottom, not top, stream. - - if page width > height, rotate it 90 degrees. - - if page is larger than paper size, scale it down. -Set default MediaBox to 8.5" x 11" to deal with non-compliant PDF - files which don't specify a MediaBox. -Added DEBUG_MEM stuff in gmem.c and gmempp.cc. -Fixed memory leaks: - - LTKWindow didn't delete the LTKBox. - - LinkAction needs a virtual destructor. -Use $(RANLIB) variable in goo/Makefile and ltk/Makefile. -Allocate image data after calling XCreateImage, using - image->bytes_per_line -- works in 24-bit mode now. -DCTStream rounds width of rowBuf lines up to the next multiple of - mcuWidth, so last MCU doesn't run off end of buffer. -Increase size of block (from 255 to 1024 bytes) read at end of file to - search for 'startxref'. -Skip past garbage at start of file, look for '%PDF'. -Moved more compiler options out of Makefiles into Makefile.config. -Top-level Makefile uses '$(MAKE)' instead of 'make' for making - subdirectories. -Space/PageDown/Next and Backspace/PageUp/Previous now moves to - next/previous page if already scrolled to bottom/top of current - page. - - -0.5a (96-jul-09) ----------------- -[not a public release] -For PDF 1.2 (a.k.a. Amber, a.k.a. Acrobat 3) support: - - look for trailer after first xref instead of at end of file. -Deal with font subsets by converting character names of the form - 'Cnnnn' to the appropriate character from the standard encoding. -Extract encoding from embedded Type 1 fonts. -Kludge to fill one-pixel thick polygons. -Changed X font encoding to use endash for hyphen (gets rid of too-long - hyphens). -Handle Resources key in Pages dictionaries (needed for pstoedit - output). -Fix comment handling in Parser (needed for pstoedit output). -Move Bezier curve conversion from GfxState to XOutputDev; look at - flatness parameter in GfxState. -Change all of the path functions in XOutputDev (stroke, fill, clip) to - use the same path transformation/conversion function. -Rewrote PostScript output driver as a subclass of OutputDev; removed - duplicated code (ps_ functions) from Gfx. -Fixed bug in xref code with small (< 1024 bytes) PDF files. -Implemented BX/EX operators. -Added PDFDoc class. - - -0.6 (96-nov-12) ---------------- -Add support for PostScript output to stdout (-) and to a command - (|lpr); added -ps option and psFile resource. -Decryption is implemented but not included in the distribution due to - legal restrictions: the decryption algorithm is a trade secret of - RSA, Inc., and the U.S.A. still has bogus export controls on - cryptography software. -Added .xpdfrc config file: - - Added fontmap parameter: user can map PDF font names to X fonts. - - Added fontpath parameter: search for Type 1 font if encoding is - not in PDF file. -Incremental display: display is updated after every 200 commands. -Added forward and backward by-10-page buttons. -Links: - - Implement links with "Launch" actions that point to PDF files. - - Draw borders around links. - - Handle links with named destinations. - - GoToR links specify a page number instead of a page reference. -Optimizations: - - Rewrote Stream to use buffering, and added lookChar() functions; - rewrote Lexer to take advantage of this. - - Use hash tables for name->code mapping in font encodings. - - Made XOutputDev::doCurve() iterative, changed /2 to *0.5, and - changed the flatness test. -Added file name to window title. -Implemented RunLength filter. -Implemented forms. -Convert ObjType to an enum. -Changed isDict("Pages") to isDict() (in Catalog.cc) to deal with - incorrect PDF files. -Changed color selection so that very pale colors don't map to white. -Fixed bug in CCITTFax filter (multiple make-up codes). -In GString::clear(): need to set length to 0 before calling resize(). -Base initial window size on first displayed page, not page 1; deal - correctly with rotated pages. -Added ltkGetIntResource() and LTKApp::getIntResource(). -PostScript output fixes: - - Escape backslashes in strings. - - When doing ASCII85 encoding, keep both chars of EOF marker ('~>') - on same line. - - Add extra line '%-EOD-' after image data streams; call wrapper - functions for image and imagemask which look for this line -- this - should fix the 'too much data in stream' bug. - - Font tags can be reused for different fonts on different pages -- - so use font object reference (number/generation) instead. -Initialize character widths to zero (this caused crashes on OSF/1). -Handle image masks which go outside of pixmap. -Makefile.config changes: - - Remove -o in C++ compile rule. - - Add $(AR) variable. -Code which read char widths from font dictionary read all but the last - width. -Add 'return 0;' to main() in xpdf and pdftops. -Allow fonts to use StandardEncoding. -Convert man pages to VMS help files. - -0.7 (97-may-28) ---------------- -Implemented FlateDecode filter (for PDF 1.2). -Basic xref table reconstruction for damaged files -New pdftotext program converts PDF to plain text. -Implemented menus in LTK; added a menu to xpdf. -Added open and save functions; allow xpdf to start without any PDF - file. -Implemented text find. -Implemented text select/copy. -Change mouse cursor when it's over a link. -Embed Type 1 fonts in PostScript output. -Moved rotate functions to menu; added quit to menu. -Fixed stroke color bug in PostScript output (was using fill color - instead of stroke color; this sometimes caused lines to be missing - (white) in PostScript output). -Support Launch-type links -- pops up a dialog before executing - anything. Expects the A (action) dictionary to contain a Unix - dictionary with F (file) and P (paremeter) keys just like the Win - dictionary. -A moveto op all by itself should just be discarded, instead of - generating a subpath with one point (this was causing seg faults). -Balanced parentheses in strings don't need to be escaped. -Tj operator in PostScript prolog didn't check for zero when dividing - by length of string. -Implemented selection in LTK; TextIn widgets support dragging/copy/ - paste. -Handle font subsets that use hex character codes. -Added icon pixmap; added the XPMLIB and NO_XPM variables to - Makefile.config. -Fixed subtle bug in use of horizontal scaling parameter (it affects - only the width of drawn characters, not positioning done in text - space). -Memory testing (with DEBUG_MEM): - - gmalloc now fills memory blocks with garbage to catch unitialized - fields. - - gfree fills memory blocks with garbage to catch uses of freed - blocks. -Handle image masks which go off the pixmap on the top and/or left. -Fixed inline functions which had two return statements (to make the - HP, SCO, and other cfront-based compilers happy). -Fixed bug which caused seg faults when following a link to a different - file (info in LinkGoto object was used after link was deleted by - loadFile). -If page content is an array of streams, the streams are concatenated; - objects and commands can span multiple streams. -If file open fails, try lower-casing and upper-casing the file name. -Commands should end when lexer sees a '/' character. -GString::append(char *, int) was broken. -Changed LTKScrollingCanvas redraw to be more efficient: copy as much - as possible from window before copying from off-screen pixmap. -Ignore gs (set extended graphics state) operator. -Handle colorspaces (CalGray/RGB are treated as DeviceGray/RGB; the - weird colorspaces are not yet implemented). -Named destinations (for links) can be strings as well as names; deal - with the names tree in the catalog. -Clip to the page CropBox. -Added '-q' to gzip options (to suppress warnings, in case user has -v - in GZIP env var). -Added 'include Makefile.config' to top-level Makefile. -Added INSTALL variable to Makefile.config; used in top-level - Makefile. -Always initialize LinkDest left/bottom/top/right/zoom fields (bogus - floating point values were causing crashes on Alpha). -Added Makefile.config options for Digital Unix (DEC compilers), HP-UX - (HP compilers), SCO Unix, and Evans & Sutherland ES/OS. -Added flag to set stream mode in fopen call for VMS. -Rewrote Link module. -Pages with no contents shouldn't cause an error message. -In PostScript output: pdfImM needs to set fill color before doing - imagemask. -If font doesn't specify character widths, use widths from built-in - font, based on font flags. -Fixed LTK scrollbar to delay before repeating and to control the - period between repeats. -Removed window/widget copy() methods (they were untested and unused). -Unknown filter types produce a single error message instead of a - stream of errors. -Added a dummy target in top-level Makefile so making individual - executables (e.g., 'make pdftops') should now work. -Added optional xpdf-flip.ltk with buttons on right side instead of - bottom of window. - -0.7a (98-feb-22) ----------------- -Moved find command from menu to toolbar button ('f' key still works). -Support TrueColor visuals. -Added a -cmap option and a installCmap resource to install a private - colormap. -Mouse button 2 pans the window. -Selecting a URI link now executes a configurable command (from the - urlCommand resource). -Added a "link info" display which shows the URL or file for the link - under the mouse. -Don't draw (or convert to PostScript) text drawn in render modes 3 and - 7 -- this is invisible text, used by Acrobat Capture; this text is - still passed to the TextPage object so that selection works. -Recognize (and quietly ignore) marked content operators (BMC, BDC, - EMC, MP, DP). -Recognize new color-setting operators (scn, SCN). -Added A4_PAPER option. -Embed external Type 1 font files (this currently only works with PFA - files). -Added "-level1" option (in xpdf and pdftops) to generate Level 1 - PostScript. -Setup autoconf -- replaced Makefile.config. Added SELECT_TAKES_INT - flag, and use configure to autodetect (for HP-UX). -Fixed appendToPath() to behave reasonably when appending ".." to root - directory. -Fixed array size in FlateStream::compHuffmanCodes() (was causing xpdf - to crash under OSF/1). -ASCII85Stream, ASCIIHexStream, and DCTStream didn't check for EOF and - could run past the end of the stream in damaged files. -Handle hex escapes (#xx) in names. Still allow the name /# for - backward-compatibility. -Check for NULL characters in encoding array in GfxFont.cc (was calling - strcmp() with NULL which crashed under Solaris). -PageAttrs::PageAttrs() didn't initialize crop box boundaries. -Changed uses of lookup() to lookupNF() in XRef.cc. -Fixed type checking of operators which take a variable number of - args. -Gfx::buildImageStream() doesn't need to check for parser (since I got - rid of the bogus array-of-command thing). -XOutputFont matches on font reference instead of font tag (similar to - PSOutputDev fix). -Fixed bug in position calculation for multi-char substitutions in - XOutputDev. -Cleaned up local variables which hid class variables. -Optimized variable length decoding in CCITTFaxStream. -Set link border width to zero if Border dictionary entry is missing. -Throw away zero-length strings in TextOutputDev -- they don't have - valid xMin/xMax values. -Swapped order of XLIBS and XPMLIB in xpdf/Makefile. -Deleted 'LTKApp::' in function declaration in LTKApp.h. -Changed '(XKeyEvent *)&event' to '&event.xkey' in LTKApp.cc. -Check that the link rectangle coordinates are in the correct order, - and swap if necessary. -TextOutputDev didn't set text to NULL, which caused pdftotext to - segfault if it couldn't open it's output file. -Fixed a hash table search bug in GfxFontEncoding::getCharCode(). -Cleaned up colorspace code: rewrote GfxColorSpace and added - GfxImageColorMap; cleaned up PSOutputDev::doImage. -Handle named colorspaces in images. -Correctly set the default color after a colorspace change. -Old setcolor operators now set the colorspace. -Fixed bug with uncompressed blocks in FlateStream. -Fixed bug with fixed Huffman code table in FlateStream. -Added hash table of X windows (for LTKWindow and LTKWidget) to LTKApp - and replaced calls to XQueryTree with hash table searches -- this - avoids a roundtrip to the server for each event and also fixes the - problem where XQueryTree crashed if the window no longer existed - (with leftover events from a destroyed window). (Thanks to Yair - Lenga for the suggestion.) -Create a new GC for selection -- xor black and white (instead of LTK - foreground and background). -Fixed crash with blank lines in .xpdfrc. -Allow spaces in font descriptors in fontmap lines in .xpdfrc. -Check for bogus object number in XRef::fetch(). -Use MacRomanEncoding for TrueType fonts that don't specify an - encoding. -Certain PDF generators apparently don't include FontDescriptors for - Arial, TimesNewRoman, and CourierNew -- set GfxFont flags - appropriately. -Fixed a bug in width guessing in GfxFont -- sans serif and serif were - swapped. -Rewrote XRef::readXRef() to avoid using a parser to read the xref - entries. -Added NO_TEXT_SELECT option. -Ignore APPn/COM/etc. markers in DCT streams. -Replaced select() with XMultiplexInput() in LTKApp.cc for VMS. -Handle WM_DELETE_WINDOW protocol -- if you ask the window manager to - delete the xpdf window, xpdf will exit cleanly; other - windows/dialogs are simply closed. -Optimized DCT decoder; switched to integer arithmetic. -The "/Type /Annots" field in an annotation dictionary is optional. -Check for null nameTree in Catalog::findDest(). -In XOutputDev, search user font map before default font map. -Added "normal" SETWIDTH parameter to all font descriptors in - XOutputDev (some systems have a narrow-width Helvetica font). -Added FOPEN_READ_BIN and FOPEN_WRITE_BIN to support Win32. -Added a hack which allows better font substitution for some Type 3 - fonts. Also allow character names of the form /nn and /nnn. -Added and to LTKApp.cc (needed by AIX and IRIX - for bzero() declaration for FD_ZERO). - -0.80 (98-nov-27) ----------------- -Support for some Japanese fonts (Type 0 fonts using the Adobe-Japan1-2 - character collection, horizontal only). -Added pdfinfo application. -Added pdftopbm application. -Added pdfimages application. -Added -papercolor option and .paperColor resource. -Fixed divide-by-zero problem in XOutputDev Type 3 font matrix kludge. -Font subset char names can be 'Bxx' as well as 'Cxx' and 'Gxx'. -Fixed bug in color space conversion in DCTStream filter (YCC->RGB was - correct, YCCK->CMYK was broken). -Added XRef::getDocInfo() and PDFDoc::getDocInfo() to support pdfinfo. -Optimized GfxImageColorMap. -Lexer::getStream(), getPos(), and setPos() check for null stream. -Decryption code now does strings as well as streams. -ASCII85 decoder rounds short tuples up instead of down. -CropBox and MediaBox can be non-integers. -PostScript output: - - Use a rectangle operator. - - Call setpagedevice with page size. - - Insert %%PageOrientation comments. - - Add paper size flags (-paperw and -paperh) to xpdf and pdftops. - - If HAVE_POPEN is not defined, and user tries to print to '|...', - the PSOutputDev destructor tried to write to the PS file. - - Added support for forms (pdftops -form). -Removed error messages for empty paths in stroke, fill, etc. operators. -Don't allow flatnesses less than 1 in XOutputDev (this speeds up - rendering a little bit when there are lots of tiny curves). -Moved the font subset character name guessing from GfxFont to - XOutputDev and TextOutputDev - now these files print correctly. -Cast argument to XFree() to XPointer; add XPointer definition where - necessary (portability fixes). -Various minor VMS fixes. -Changes to configure script and Makefiles: - - Print a warning if X is missing. - - Use C++ when checking select() argument type (HP-UX). - - Use 0 instead of NULL when checking select(). - - Default to gcc instead of c++. - - Get rid of AC_C_INLINE -- this is meant for C, not C++. - - Changed -USE_GZIP to -DUSE_GZIP. - - Added ability to compile ouside of the source tree. - - Added .cc.o rule to {goo,ltk,xpdf}/Makefile.in. - - Added @LIBS@ to XLIBS in xpdf/Makefile.in. - - In top-level Makefile.in: added '-' to clean commands; added - distclean rule. - - Create install directories. - - Use INSTALL_DATA (instead of INSTALL) for man pages. - - Changed xpdf-ltk.h rule to avoid leaving an empty file when - ltkbuild fails. - - Change things so that by default, ltkbuild is not built and - xpdf-ltk.h is not rebuilt. - - Use AM_PROG_CC_STDC to add compiler flags for ANSI C. - - Modify autoconf's builtin macros to check for xlC. - - Use Steve Robbins' smr_CHECK_LIB to test for pixmap library (Xpm) - -- this should fix the problems on systems that have the library - but not the include file. - - Added better test for sys/select.h, sys/bsdtypes.h, strings.h, - bstring.h. - - New VMS make scripts from Martin P.J. Zinser. - - Moved dependences into Makefile.in -- this gets rid of problems - with 'cc -MM' (which is gcc-specific) and 'include Makefile.dep' - (which isn't supported by all make implementations). Also changed - all non-system include files to '#include "..."' (from '<...>'). -Tweaked the TextOutputDev heuristics slightly. -Modify Gfx to use a stack of resources -- this is necessary for Form - XObjects, which can define their own local resources; also modified - PSOutputDev to dump fonts used by forms. -Look for excessively large MediaBox (compared to CropBox) and shrink - it to CropBox. -Minor fix to scrolling when dragging a selection. -Various patches for pdftex and Win32 support. -Deal with Separation colorspaces by using their alternate colorspace - entry. -Added PBMOutputDev for pdftopbm application. -Added ImageOutputDev for pdfimages application. -Separated XOutputDev into LTKOutputDev + XOutputDev. -Added support for 1-D and mixed 1-D/2-D (Group 3) decoding to - CCITTDecode filter. -Added resetImage(), getImagePixel(), and skipImageLine() to Stream - class; used these in XOutputDev, PSOutputDev, and ImageOutputDev. -Implemented predictor for LZW and Flate filters. -In pdfImM1 in PSOutputDev prolog: div should be idiv. -Changed output from printUsage() function in parseargs to look nicer. - -0.90 (99-aug-02) ----------------- -Added Type 1/1C font rendering, using t1lib. -Added "backward" and "forward" buttons. -Added fit-page and fit-page-width zoom factors; replaced zoom-in and - zoom-out buttons with a zoom popup menu. -Type 1C fonts are converted to Type 1 and embedded in PostScript. -Support vertical Japanese text. -Added Japanese text support (EUC-JP) to pdftotext. -Bumped PDF version to 1.3. Added stub functions for ri and sh - operators. (But there are still some missing 1.3 features.) -Added -raw option to pdftotext. -Minor changes to allow compiling under MS Visual C++ 5.0. -Top-level makefile: changed 'mkdir -p' to '-mkdir -p'. -Configure script: added X_CFLAGS to smr_CHECK_LIB(Xpm). -Added Xpm_CFLAGS to xpdf/Makefile.in (this is needed to get the -I for - the xpm includes). -Rewrote code that handles font encodings; added support for Type 1C - fonts. -In the setpagedevice dictionary in PostScript output - added a - /Policies entry which tells the PS interpreter to scale the page to - fit the available paper. -Changed PageUp behavior slightly: move to bottom (instead of top) of - previous page. -TextPage used character's dx (width + char space) instead of just its - width. -Read base URI from document Catalog (for URI-type links). -Minor change to configure script to avoid using 'unset'. -Fixed bugs in CropBox inheritance. -Fixed a bug in resource stack handling for form objects. -Display forms even if they have a missing/incorrect FormType. -Fixed a bug in stream predictors -- the predictor parameters (width, - comps, bits) don't need to match the actual image parameters. - Completely rearranged the predictor code. -Fixed PostScript output to correctly handle stream predictors. -Don't segfault on empty (zero-page) documents. -Added the xpdf.viKeys feature. -Added the ffi and ffl ligatures to XOutputDev and TextOutputDev. -Pdftotext and pdfimages now check okToCopy(). -Added a '-q' flag to all programs (except pdfinfo) to suppress - messages and errors. -Deal with DeviceN colorspaces by using their alternate colorspace - entry. -Change PostScript output so setpagedevice is only called once, at the - very beginning of the document (to avoid problems on duplex - printers). -Changes to configure script and makefiles for DOS/DJGPP. -FontEncoding::getCharCode() looked for (code>0) instead of (code>=0). -Added keypad arrow keys, etc. to xpdf. -Minor changes to gfile.{h,cpp} () to compile under VC++. -Fixed CCITTFaxStream to correctly handle all parameters. -Modifications to gfile.{h,cc} for Acorn. -Some minor changes for OS/2. -Added 'SHELL = /bin/sh' to Makefiles. -Compare file version to pdfVersionNum+0.0001 to avoid floating point - precision problems. -Added LDFLAGS to Makefiles. -Removed strip entirely from configure and Makefiles. -Fixed a bug in choosing the correct DCTStream color transform. - -0.91 (2000-aug-14) ------------------- -Added TrueType font rendering, using FreeType. -Support for Chinese fonts (Type 0 fonts using the Adobe-GB1-2 - character collection). -Decryption code is included with the main distribution (now that the - US export regulations are a little bit less irrational). -Added (very basic) support for generating PostScript with Japanese - fonts -- only tested with ghostscript so far. -Added support for generating EPS files (pdftops -eps). -Much-improved image filtering in xpdf (for downsampling and for - transforms other than 0/90/180/270-degree rotations). -Implemented a basic full-screen (presentation) mode (xpdf - -fullscreen). (There is currently no way to switch between window - and full-screen modes on the fly -- this will be fixed in a later - release.) -Added "reload" menu item. -Do a better job with anti-aliased Type 1 fonts on non-white - backgrounds. -Handle Lab color spaces. -Handle non-null user passwords. -Avoid security hole with tmpnam()/fopen() -- added openTempFile() in - goo/gfile.cc. [Thanks to Joseph S. Myers for pointing this out.] -Filter out quote marks (' and ") in URLs before running urlCommand to - avoid a potential security hole. [Thanks to Frank Doepper for - pointing this out.] -Fixed TrueColor detection to look at the complete list of available - visuals, not just the default visual. -In gfile.h, changed NAMLEN(dirent) macro to NAMLEN(d). -Removed copyright character from start-up banners. -In the open and save dialogs, if the open/save button is pressed with - no file name, the dialog is not canceled. -Added Xpm_CFLAGS to ltk/Makefile. -XOutputDev::updateLineAttrs was using dashLength before it was - defined. -In top-level Makefile.in, use INSTALL_PROGRAM instead of INSTALL. -In man page, recommend -q instead of -err in .mailcap. -Changes for GNOME / Bonobo support: - - Separated Stream classes into BaseStream and FilterStream trees. - - Got rid of all FileStream-specific stuff. - - Added a PDFDoc constructor that takes a BaseStream* instead of a - file name. -Allow newlines inside strings (Photoshop does this). -Don't require whitespace between tokens in consecutive content - streams (for pages that specify an array of streams). -Look at MissingWidth when constructing font character widths array. -Fixed a bug that caused incorrect PostScript output for images that - use 8-bit indexed color spaces with < 256 colors in the palette. -Handle case where embedded font file is bad (this was seg faulting). -Minor changes for Windows/pdftex. -Work around a bug in PDF files from the IBM patent server. -Fixed bugs in PostScript form generation: use pdfStartPage instead of - pdfSetup; problem with inline images. -Minor bug fix in FlateStream::loadFixedCodes(). -Added %%DocumentMedia and %%PageMedia comments to the PostScript so - that gsview (a Windows frontend for ghostscript) gets the right - paper size. -Draw AcroForm fields that have appearance annotations. -Bounds check gray, CMYK, and RGB values (in GfxColor). -Moved the link border drawing code into Page (from PDFDoc). -Minor modifications for pdftohtml. -PSOutputDev: use the Type 3 font scaling kludge from XOutputDev. -Separation color spaces were handled incorrectly in images. -Fixed a bug with form bounding boxes. -Modified the t1lib support -- replace libt1x code with my own code. - Type 1 and TrueType fonts are now handled similarly, and clipping - works on Type 1 fonts. -Don't print copyright banner (xpdf); add -v switch to get copyright - and version info (all apps); get rid of -err switch (xpdf). -Automatically reload the PDF file if it has been changed, i.e., if the - modification time is different. -Fixed a memory (malloc size) bug in CCITTFaxStream. -Fixed two bugs in FontEncoding::hash() -- handle zero-length character - names (which were found in a (buggy?) PDF file), and handle - character names with high-bit-set characters (use unsigned ints). -Added PDFDoc::isLinearized() and corresponding code in pdfinfo.cc. -Handle files with an incorrect page count in the Pages dictionary - (FOP, from the Apache project produces a page count of 0). -Handle TrueType equivalents to the Base14 fonts (Arial, TimesNewRoman, - CourierNew) -- Adobe's tools use these names without embedding the - fonts. -Tweaked the Type 3 font sizing kludge. -Changed pdfimages (ImageOutputDev) so it doesn't output JPEG files for - 4-component color spaces, since these seem to confuse most image - viewers. -Added support for generating OPI comments (pdftops -opi). -In XOutputDev::drawImage() and drawImageMask(), check for images that - are completely off-page. -Use the provided alternate or a default (DeviceGray/RGB/CMYK) color - space for ICCBased color spaces. -Incorporated MacOS-specific code from Leonard Rosenthol. -Configure script switches to C++ for the strings.h/bstring.h test. -Gfx::opRestore() calls clearPath() to handle (apparently) buggy PDF - files produced by FreeHand. -The /Type field in most dictionaries is optional (PDF 1.3 change). -Move printCommands variable definition into Gfx.cc. -If page is smaller than paper, center the PostScript output. -Fix a minor bug in the SELECT_TAKES_INT detection in the configure - script. -TextOutputDev filters out control characters. -Changed enough occurrences of 'char *' to 'const char *' to keep gcc - 2.95 from barfing. -Support for Latin-2 and Latin-5 in pdftotext (however, this will only - work if the PDF file contains correct font encodings, which seems to - be rare). -TextOutputDev converts "eightoldstyle" to "eight", etc. -Don't use the return value from sprintf() -- most systems return the - length, but some return the string. -Minor fixes for SunOS 4. -Configure script looks for both select() and fd_set in sys/select.h. -Configure script checks for gethostbyname() in -lbsd (for LynxOS). -Fix missing closepath bug in PostScript output. -Change PostScript portrait/landscape mode selection so it only uses - landscape if the page width is greater than the paper width. -Tweaked the VMS code in makePathAbsolute(). - -0.91a (2000-oct-11) -------------------- -Implemented separable CMYK PostScript output (the -level1sep switch to - pdftops). -Implemented Pattern color spaces with tiling patterns (polygon fills - only). -Implemented Stamp annotations. -Implemented Named link actions. -Fixed a really dumb bug in the TrueColor code in SFont (which affects - both Type 1 and TrueType font rendering on 16-bit displays). -Rewrote the GfxColorSpace / GfxColor code. -Switched from djgppcfg to dj_make.bat (from Michael Richmond). -Bug in the Type 1 encoding parser -- couldn't handle lines of the form - 'dup NNN/name put' (with no space between the code and the name). -Fixed the mkstemp() test in configure.in -- switched from - AC_TRY_COMPILE to AC_TRY_LINK and added . -Added DESTDIR to top-level Makefile.in. -Fixed an incorrect OPI comment in PSOutputDev. -Minor tweak to the CCITTFax code to avoid writing past the end of an - array on an invalid data stream. -Xpdf crashed if the user selected 'reload' when no document was - loaded. -Look for character names of the form "xx" (two hex digits with no - leading alphabetic char) and 'cNNN' (decimal digits with a leading - alphabetic char that happens to be a hex digit). -FlateStream didn't correctly handle zero-length streams. -Xref reconstruction didn't handle the case where the opening "<<" - immediately followed "trailer" with no intervening whitespace. -Fix the %%DocumentSuppliedResources comment in EPS output. -Scale annotations to fit their rectangles. -Added Stream::close() to handle cases (e.g., patterns) where a Stream - object is used multiple times before it is deleted. -Added the topLevel arg to Gfx::go() so it doesn't call out->dump() for - every pattern element (and form). -Rearranged the GfxResources class. -Clean up white space handling in Lexer. -Make the dpi parameter to PDFDoc::displayPage etc. a double - this - avoids margin gaps with fit-page and fit-width. -Fix a rounding problem in xpdf.cc that was causing the window to - sometimes be one pixel too small. -Fixed a minor bug in dealing with Base-14 TrueType font names. -Fixed Lab -> RGB color space conversion. -Added support for opacity values (from PDF 1.4) to GfxState and - OutputDev. [Thanks to Leonard Rosenthol.] -Implemented type 2 functions; rearranged the Function class - hierarchy. - -0.91b (2000-oct-29) -------------------- -Print a warning about Type 3 fonts (XOutputDev, PSOutputDev). -Added the scroll lock behavior to 'n' and 'p' keys in xpdf. -Change FileStream buffer size to a #define'd constant. -Renamed Pattern to GfxPattern to avoid clashes with Windows and MacOS - types. -Added CNS (Big5) Chinese font support (CHINESE_CNS_SUPPORT); renamed - CHINESE_SUPPORT to CHINESE_GB_SUPPORT. - -0.91c (2000-nov-19) -------------------- -Fix an endianness problem in the Type 1 font code which resulted in an - incorrect display with "-t1lib plain" on big-endian systems. -CCITTFax stream decoder will skip over extra zero bits at end of line, - even if EncodedByteAlign flag wasn't set. -Added Big5 support to pdftotext (with CHINESE_CNS_SUPPORT enabled). -Fixed a typo in the CNS/Big5 encoding translation table. -Change the form code in PSOutputDev to store images in arrays of - strings. -The xref reconstruction (for damaged files) now also looks for - 'endstream' tags, and the parser uses this information when setting - up stream objects. -In pdfinfo, convert Unicode chars in the 00xx range into 8-bit chars; - print a warning if there are any other Unicode chars. - -0.92 (2000-dec-03) ------------------- -Fixed %%BeginResource comment (for xpdf procset) in PostScript - output. -Added "-title" switch and "xpdf.title" resource to set the window - title. -Check for in addition to . -Upgraded the configure script to smr_macros 0.2.4 - this should fix a - bug where configure wasn't correctly finding t1lib. - -0.92a (2000-dec-17) -------------------- -Added 'extern "C" { ... }' in various places for ANSI C++ compliance. -Tweaked the code that figures out DPI for fit-to-page and fit-to-width - modes. -Fixed the image transformation code in XOutputDev -- no more missing - lines. -Implemented color key image masking in XOutputDev. - -0.92b (2001-jan-07) -------------------- -Fixed a bug in the error-checking code in the Separation/DeviceN color - space parsing functions. [Thanks to Lidia Mirkin.] -Added wheel mouse support (mouse buttons 4 and 5). [Thanks to - Thorsten Schreiner.] -Added preliminary support for FreeType 2 (disabled by default). - -0.92c (2001-jun-04) -------------------- -Fixed a bug in the new image transformation code. -Look for character names of the form "", instead - of looking for names beginning with a few specific letters. -T1FontFile::T1FontFile wasn't initializing vars, and ~T1FontFile - wasn't checking before calling T1_DeleteFont -- this caused crashes - if it tried to open a nonexistent font file. -Catalog::Catalog didn't set baseURI to NULL early enough. -Tweak the check for strings.h in the configure script. -Yet another fix for the image rotation code in XOutputDev -- - off-by-one problem when upsampling. -Handle Type 1/1C encodings when using FreeType 2. -Allow FreeType2 to render user-supplied Type 1 base fonts. -Opening a new file from full-screen mode tried to scroll. -Fixed a bug in GfxFont constructor (missing check for NULL base font - name). -Don't crash if a Type 1 font's FontBBox is non-integer. -Pdfinfo prints page size. -Tweak for the alpha hack in T1Font/TTFont: sample the middle pixel - instead of the top-left pixel. -Automatically activate the text input widget in the find window. -Changed a Japanese char code mapping in XOutputDev and TextOutputDev: - period was being incorrectly mapped to small circle (end-of-sentence - character). -Add the 0/+/-/z/w key bindings to control the zoom setting. -Fixed ImageOutputDev (pdfimages) to correctly handle inline image - masks. -Extract ascent/descent info from font descriptor. - -0.92d (2001-jun-26) -------------------- -Embed TrueType fonts in PostScript output. (Added a "-noembtt" flag - to pdftops.) -Extract encoding from TrueType fonts. -Moved Function classes to a separate file (Function.h/cc). -Implemented multi-dimensional sampled Functions. -Implemented Type 4 (PostScript calculator) Functions. -For Type 0 fonts, FontDescriptor is in descendant font, not parent. - [Thanks to Lidia Mirkin.] -Added the "-htmlmeta" option to pdftotext. -In TextOutputDev, when computing the number of blank lines to insert, - do a sanity check on the result. -If both FlateDecode and some other filter (e.g., DCTDecode) were - applied to an image stream, getPSFilter() crashed instead of just - returning NULL. -Handle the /Identity function. - -0.92e (2001-aug-23) -------------------- -Widths in font dict should override built-in font widths. -Changed "rotate left/right" menu items to "rotate - clockwise/counterclockwise". -The link parsing code choked if the Border array was incorrect (too - short). -Modified PSOutputDev to output CMYK for fill/stroke colors. - -0.93 (2001-oct-25) ------------------- -Implement PDF 1.4 (128-bit) decryption. -Bump supported PDF version number to 1.4. -Text output for Simplified Chinese. [Thanks to Cheung Siu Fai.] -Read an app-defaults file for Xpdf. -Read a system-wide config file (/etc/xpdfrc) if ~/.xpdfrc - doesn't exist. -Accept and verify owner password; if correct, allow all actions. -Added a "-level2sep" option to pdftops to generate Level 2 separable - PostScript. The PostScript separation convention operators are used - to handle custom (spot) colors. [Thanks to Thomas Freitag for help - on this.] -Add support for FreeType 2 to the configure script. Warning: this - requires FT 2.0.5 or newer. -Fixed the bounding rectangle overlap test in the disconnected subpath - fill hack in XOutputDev. -Stupid typo in font name table in PSOutputDev. -Changing the zoom setting with a keyboard shortcut didn't update the - displayed setting. -Modified the mouse wheel support and added the second wheel (mouse - buttons 6 and 7). [Thanks to Michal Pasternak.] -Character and word spacing is affected by horizontal scaling (display - and PS output). [Thanks to Eddy Ng.] -Rotation specified by the text matrix, character spacing, and - horizontal scaling interacted incorrectly (display and PS output). -Some broken Type 1/1C fonts have a zero BBox -- kludge around this by - assuming a largeish BBox. -Handle PDF files with an incorrect (too small) xref table size. -Allow "-?" and "--help" as aliases for "-h" (all apps). -Correctly handle unescaped parens in strings in Lexer. -Fixed a bug in LTK where a menu got posted multiple times if you right - clicked while a page was being rendered. -Removed a comma inside a string in configure.in. -Kludge around broken PDF files that use char 32 but encode it as - .notdef instead of space. -Clean up various compiler warnings: use constructor args like "fooA" - if there is a field named "foo". Everything now compiles cleanly - under gcc 2.91.66, 2.95.2, and 3.0.1. -Page objects now read all of the page rectangles (MediaBox, CropBox, - BleedBox, TrimBox, ArtBox), as requested by the pdfTeX folks. - Added a new PDFRectangle struct to hold these. -Use XOutputDev's Type 3 font size hack in TextOutputDev too, so it - does a little better job of extracting text in Type 3 fonts. -Modify pdfimages to write one-bit images as PBM files. -Work around a bug in cygwin's implementation of fseek. - -0.93a (2001-nov-21) -------------------- -Implemented the sh (shaded fill) operator for the axial shading type. -Minor fixes to avoid compiler warnings. -Cleaned up global variables -- moved many into instance vars and - function args. -Minor fixes for OS/2. -Fix the system config file path for VMS. -Fix an uninitialized var in XOutputDev that caused crashes on Alphas. -Don't incrementally update the display in full-screen mode. -For Type 1/1C fonts, use the FontBBox from the PDF FontDescriptor - (instead of the one in the font file) if present -- this avoids - problems with fonts that have non-standard FontMatrixes. -Add the Euro character to WinAnsiEncoding. -Track the bounding box of the clip region to make rendering patterns - more efficient. -Fix openTempFile() for Win32. - -0.93b (2001-dec-11) -------------------- -Added a duplex option to PSOutputDev and a -duplex switch to pdftops. -Added XRef::PDFgetDocInfoNF() for pdftex project. -Updated the VMS build script. - -0.93c (2001-dec-12) -------------------- -Completely rewrote the code that handles font encodings: - - everything is Unicode-based - - 16-bit fonts are handled much more cleanly - - text output encoding can be set more flexibly -New .xpdfrc config files. - -1.00 (2002-feb-01) ------------------- -More work on the font encoding rewrite: - - use the ToUnicode font dict entry - - pdfinfo and pdftotext (with '-htmlmeta') convert info strings to - the selected text encoding -Added key bindings for forward ('v') and backward ('b'). -Added the pdffonts program which lists the fonts used in a PDF file. -Fixed several problems in the TrueType font embedding code (for - PostScript output). -Accept named destination on command line. -Added several new items to pdfinfo: file size, PDF version, tagged - (yes or no), XML metadata (with the -meta option). -Pdftops didn't get the portrait/landscape setting correct for PDF - files with rotated pages. -The TrueTypeFontFile class (including the Type 42 converter) now - understands cmap format 6. -Improved the "about" window -- mention the GPL, add a list of key - bindings. -Added Zcaron and zcaron characters to WinAnsiEncoding. -The '0' keyboard shortcut didn't update the zoom popup menu. -Handle the complete list of alternate names for the Base14 fonts. -Fixed substitute font scaling in XOutputDev - scale only the width, - not the height. -Implemented stitching (type 3) functions. -Handle the case of moveto/closepath/clip, which defines an empty - clipping region. -Move dependences into separate Makefile.dep files; get rid of the - distdepend target. -Move all of the configure-script-generated -D options out of the - Makefiles and into a top-level .h file (aconf.h). -Cleaned up the FreeType 1/2 detection code in the configure script. -Pdfinfo prints dates in a more readable format. -Fixed a bug in the Paeth image predictor. -Handle annotations with multiple states. -Another workaround for buggy X servers: clip points that are way out - of bounds. -Added libpaper support (for Debian). -Generate PostScript DSC resource comments for PS (not just EPS) - files. -The save and restore (q/Q) operators shouldn't save/restore the path. -Performance optimization: disable pattern drawing in TextOutputDev. - -1.00a (2002-feb-25) -------------------- -Added an optimized special case for one-bit images in XOutputDev. -Implemented CID TrueType font embedding; added a psEmbedCIDTrueType - option. -The initialZoom X resource was broken. -The reverse MacRoman encoding should return 32 for "space" (not 202, - which is an alternate encoding). -Tweaks to the FreeType 2 support: only disable hinting if the bytecode - interpreter is disabled (i.e., disable autohinting but not bytecode - hinting); add some padding to the glyph cache for CJK fonts. -Added level3 and level3Sep options for the psLevel setting and - corresponding -level3 and -level3Sep options to pdftops. -Added a -level2 option to pdftops for consistency. -Avoid a divide by zero in pdftotext. [Thanks to William Bader.] -Added a Greek language support package. [Thanks to Alexandros - Diamantidis and Maria Adaloglou.] -Don't bother trying to extract a "builtin" encoding from a TrueType - font. -Accept either a page number or a page reference in a link - destination. -Update the fontFixedWidth flag in GfxFont after reading the char - widths (used by the Acorn RiscOS port). -Removed yet another (illegal but not caught by gcc) class specified - from a .h file. -Avoid using snprintf - it's not available everywhere. -Improved the CMYK->RGB transform. -Use mkstemps where available. - -1.01 (2002-may-20) ------------------- -Implemented Type 3 fonts. -Implemented PostScript CID font embedding; added a - psEmbedCIDPostScriptFonts option. -Implemented PostScript 16-bit font substitution; added psNamedFont16 - and psFont16 options. -Moved the initialZoom setting from X resources to the xpdfrc file. -Implemented the radial shading type in the sh (shaded fill) operator. - [Thanks to Mike Sweet.] -Added an 'include' command to the xpdfrc format. -Added the displayNamedCIDFontX option so different fonts can be used - within one character collection. -Added a simple reverse video mode (-rv switch, xpdf.reverseVideo - resource). -Implemented stroked text in XOutputDev (with t1lib and FreeType2). - [Thanks to Leonard Rosenthol.] -Implemented stroked text in PSOutputDev. -Added a built-in Unicode map for UCS-2. -New key binding in xpdf: 'g' activates the page number text field. -PSOutputDev will now embed external TrueType fonts in addition to - external Type 1 fonts. -The psEmbedType1Fonts and psEmbedTrueTypeFonts options were missing - the "Fonts" suffix. -Documentation in xpdf.1 for -freetype option was wrong. -Added the Big5ascii Unicode map to the Chinese-traditional support - package (maps 7-bit ASCII straight through). [Thanks to Lawrence - Lai.] -Modified the EUC-CN and EUC-JP encodings to pass 7-bit ASCII straight - through. [Thanks to Lawrence Lai.] -Avoid a divide by zero in XOutputDev. [Thanks to Simon Burge.] -Remove old code in openTempFile that removed an extension from the - name returned by tmpnam. -Tweak the scrolling behavior when switching pages. [Thanks to Case - Jones.] -In the code that guesses character names (for font subsets), also - handle names of the form 'ABnnn'. [Thanks to Colin Granville.] -Fix the transform code for annotations. -Improved the CMap file parser to handle more general PostScript - lexical conventions. -Added '-enc' option to pdfinfo. -Added the small caps and oldstyle numbers from Adobe's Unicode - corporate use area to the Latin1 and ASCII7 Unicode maps. -The code in TextOutputDev that guesses Type 3 font size could generate - a zero size, which resulted in div-by-zero errors. -Various tools (including Adobe's) occasionally embed Type 1 fonts but - label them Type 1C - so check for a '%!' at the start. -Some tools embed Type 1C fonts with an extra whitespace char at the - beginning - just skip over it. -Fixed a typo in the Simplified Chinese add-to-xpdfrc file. -Updates to dj_make.bat and the djgpp build instructions. -Added a Turkish language support package. -Updated VMS build scripts. [Thanks to Martin Zinser.] -Modify the incremental display update code to redraw less often if - most of the commands are vector graphics, as opposed to text and - images. -Tweak the Type 1 font bbox code to look at the bboxes in both the PDF - font object and the embedded font file. -Fixed the ETenms-B5-H CMap file (for traditional Chinese) to map the - Latin characters to their proportional versions. -Added an optional displayCIDFontX entry for one of the Arphic TrueType - fonts in the traditional Chinese 'add-to-xpdfrc' file. -Remove leading '-' on include statements in Makefiles. -Added psASCIIHex parameter. -Added the GBK Unicode map to the simplified Chinese language pack. -Pdftotext now opens the text file in binary mode to avoid Microsoft's - annoying automatic end-of-line translation stuff. -Added an executeCommand function in goo/gfile.cc. [Thanks to Mikhail - Kruk.] -The %ALDImagePosition OPI comment was wrong if the page was scaled to - a different paper size. -The OPI code was saving the default transform matrix before calling - setpagedevice, which can change the matrix. -Fixed a crash when an inline image dictionary contains garbage. -Upgraded to autoconf 2.53. -Use unsigned int file offsets, to allow access to PDF files in the 2-4 - GB size range; use fseek64/ftell64 if available. -Fixed two floating point exception cases that came up with broken PDF - files. -Avoid a crash when printing an error message regarding an unnamed - font. -Default link border width should be 1. [Thanks to Michael Pfeiffer.] -Minor tweak to build with FreeType 2.1.0. -Handle "weird" characters in PostScript font names. -PSOutputDev now handles PostScript XObjects. -Added several more page attributes for the pdftex project. -Transferred the copyright to Glyph & Cog, LLC. - -2.00 (2002-nov-04) ------------------- -Switched to the Motif toolkit. -Support multiple open documents (in separate windows). -Added document outlines to the viewer. -Modified the text extraction (placement) algorithm. -Implemented the JBIG2 decoder. -Added a Latin2 language support package. -Added support for movie annotations. -Switched back to native LZW decompression code. -Text extraction from Type 3 fonts was (partly) broken. -The owner password checking code was missing a step in the case of - 128-bit encryption. -Added the 'printCommands' option to the xpdfrc file. -Added key binding for '?' to bring up the about/help dialog. -In TextOutputDev, ignore any text that's outside the page bounding - box. -Text extraction throws away "tiny" characters after the first 20000 - per page, to avoid really slow runtimes with PDF files that use - special fonts to do shading or cross-hatching; added the - 'textKeepTinyChars' option to disable this behavior. -Text extraction discards duplicated text (fake boldface, shadow - effects). -Added ctrl-F as a key binding for find. -Added a "find next" function, bound to ctrl-G. -Added ctrl-P as a key binding for print. -Modified the DCT decoder to handle progressive and non-interleaved - JPEG streams. -Added key bindings for ctrl-Home and ctrl-End. -Allow the initialZoom setting to be made in either the xpdfrc file or - as an X resource. -Added a Hebrew language support package. [Thanks to Roy Arav.] -The "make distclean" target now creates (empty) Makefile.dep files in - the three subdirectories. -Initialize XRef::ownerPasswordOk. -Correctly handle stroking of Type 3 fonts in PSOutputDev. -Generate correct PostScript for fonts with "weird" character names - (e.g., "("). -Generate correct PostScript for images using Indexed color spaces with - DeviceN base color spaces. -Added lowercase Roman numerals to ISO-2022-CN.unicodeMap (simplified - Chinese support package). -Tweak the image scaling code to better handle flipped (top-bottom - and/or left-right) images. -Generate correct PostScript code for inline images and images in Type - 3 fonts which are too large for a single PS string. -Correctly handle indexed color spaces whose base color spaces have - component ranges other than [0,1]. -Optimized the DCT decoder. -Fixed mistakes in the list of key bindings in the about/help dialog. -Optimized the Flate decoder. -Add literal names for punctuation and digits to the Unicode name - table. -Cygwin's popen wants mode "r", not "rb". -Fixed a bug in the Type 4 function parser (the "if" operator wasn't - parsed correctly). -Fix a bug in PS output for TrueType fonts with no PDF encoding. -Make the bbox size in FTFont more liberal (to avoid problems with - fonts that have incorrect bboxes). -Reverse the colors in PBM files generated by pdfimages, so the common - case (an image mask filled with black) comes out correct. -Add fseeko/ftello support which is basically identical to - fseek64/ftell64. [Thanks to Nassib Nassar.] -Modified column assignment in text extractor to account for characters - that convert to multiple characters in the output encoding. -Fix TrueType fonts which have an incorrect cmap table length. -Work around a pragma bug in the version of gcc that ships with MacOS X - 10.2. [Thanks to Frank Siegert and Andrew Stone.] -Fix a problem that was causing an infinite loop when a damaged content - stream contains an 'ID' command inside a dictionary. -Handle the case where systempapername() returns NULL (libpaper - support). -Handle fonts which are defined directly in the font resource - dictionary rather than as separate objects. -Track process colors in Level 1 separable PostScript. -Pdfinfo now checks the return value from mktime to avoid seg faults in - flakey strftime implementations. -If duplex is not enabled in PostScript output, leave the duplex - setting alone, allowing the spooler to insert its own setting. -Added three missing fclose calls. -Change the default encoding for TrueType fonts (used when the PDF file - doesn't specify an encoding) from MacRomanEncoding to - WinAnsiEncoding. -Move X_CFLAGS to the end of the list in CXXFLAGS (in Makefile.in) to - avoid some of the FreeType2 include path problems. -Fixed an obscure bug in the LZW decoder. [Thanks to Martin - Schroeder.] -Fixed a bug in decryption when using the newer (PDF 1.4) algorithm - with shorter-than-128-bit keys. -Minor optimization for image data streams: the ImageStream class can - return an entire buffered line. - -2.01 (2002-dec-05) ------------------- -Redesigned the text extraction process: - - process the text into "reading order" - - added a "-layout" flag to pdftotext to switch back to the old - style, where physical layout is maintained - - use of the "-raw" flag is no longer recommended -Added the -reload option for xpdf (in remote mode). -Added support for external CID fonts; added the displayCIDFontT1 and - displayNamedCIDFontT1 commands to the xpdfrc file. -Handle the case of moveto/newpath/clip, which defines an empty - clipping region (just like moveto/closepath/clip). -Accept XYZ link destinations with missing array elements. -Fix some problems with state save/restore triggered by Type 3 fonts - that reference other fonts. -Accept bogus font names based on "Symbol": Symbol,{Bold,Italic, - BoldItalic}. -Fixed color and font resource names in the xpdf man page. -Was using delete instead of gfree in OutlineItem::~OutlineItem. -Set the busy cursor in the find dialog while searching. -Map variants of the copyright, trademark, and registered trademark - symbols to the proper Unicode codes, not to Adobe's corporate use - area codes. -Fixed a floating point exception bug in TextOutputDev (check for a - too-small denominator). -Fixed a typo in TextOutputDev, in the code that generating blank lines - to add vertical whitespace. -Config files whose last line didn't end with a LF (or CR+LF) weren't - being handled correctly. -The code that handled CIDToGIDMaps in Type 2 CIDFonts was broken. -Check the per-glyph bounding box in Type 3 fonts, and don't try to - cache glyphs with bogus bboxes. -Allow ToUnicode CMaps to use fewer than four hex digits in the Unicode - char indexes. -Added multithreading protection to the GlobalParams class. -Fixed a bug in end-of-stream detection with the TIFF predictor. -Added some characters to MacRomanEncoding to match up with Apple's - definition. - -2.02 (2003-mar-24) ------------------- -Rewrote the text extractor code that assembles words into lines to - better handle vertically overlapping lines. -Add the "match" option for paper size (in PostScript output). -Added support for external 16-bit TrueType fonts; added the - displayCIDFontTT and displayNamedCIDFontTT commands to the xpdfrc - file. -Added an Arabic language support package. -Added the Windows-1255 encoding to the Hebrew language package. -A missing NULL check was causing a crash when closing the file in a - single window (which clears out the window, but leaves it open). -Deal with TrueType fonts whose glyph data is out of order - this - affected both FreeType rasterization and PostScript generation. -Munge font names in PSOutputDev to avoid names that are problematic - for ghostscript because they start with an out-of-limits number - (e.g., 1e999foo). -Modify the TrueType font encoding deciphering algorithm in yet another - attempt to match up with Acrobat's behavior. -Bounds check the indexHigh value in indexed color spaces. -The text extractor no longer bothers trying to get an average - character width for Type 3 fonts, since it generally doesn't work - very well (because Type 3 metrics are unreliable). -Don't crash if the user hits ctrl-G ("find again") before doing a - find. -Set the button pixmap foreground color correctly. -Handle text drawn backward on 180 degree rotated pages. -Added a magic call to XtUngrabButton after calling XmCreatePopupMenu - which appears to prevent some very odd problems (idea taken from the - DDD source code). -Fix the MacOS X fix (needed to include ). -Fixed a bunch of Motif 1.x / X11R5 incompatibilities. [Thanks to - William Bader and Albert Chin-A-Young.] -Fixed various bugs in previously untested code in the JBIG2 decoder. -Modify the XPDFCore destructor to avoid a bogus warning message from - OpenMotif 2.2. -Modified the Type 1C font parser to do proper bounds checking. -Fixed the bounds checking in the TrueType font parser. -Text extractor shouldn't do block merging in physical layout mode. -Fixed a problem in PSOutputDev in level2sep mode with images in a - Separation color space and with a non-default Decode array. -Text extraction with "-raw" was concatenating lines from the bottom of - one column and the top of the next. -Handle Type 1C subroutines in the font converters. -Correctly handle progressive JPEG images whose scans are slightly - different sizes (e.g., the Y scan rounds up to a multiple of 8 - pixels and the Cb/Cr scans round up to 16 pixels). -Avoid a potential divide-by-zero problem in TextOutputDev. -Modified the T1Font and FTFont modules to correctly handle glyphs that - are larger than the font's claimed bounding box. -Tweak dupMaxDeltaX parameter in TextOutputDev to avoid triggering on - double characters. -Improved detection in pdfinfo for ISO paper sizes. [Thanks to Hartmut - Henkel.] -Xpdf wasn't responding to the TARGETS atom, which prevented pasting - the selection into various applications. [Thanks to Phillip Ezolt.] -Handle XObjects with recursive references in their Resources - dictionaries (in PSOutputDev). -Change PSOutputDev to deal with invalid PDF files that use - non-embedded TrueType fonts with no encoding. -Check for undersized Widths arrays in fonts. -Add bounds checking code to Array class. -Updated VMS build scripts. [Thanks to Martin Zinser.] -Tweak the TrueType font handling code (again): - - char codes in symbolic fonts may or may not be offset by 0xf000 - - discard empty tables because they sometimes confuse FreeType -Fixed bounds checking in the Flate decoder. -Removed a bogus error message for exponential functions without - explicit C0/C1 values. [Thanks to Hartmut Henkel.] -Handle the other Unicode cmap type (platform=0) in TrueType fonts. -Added support for the SGI Motif horizontal paned window widget. - [Thanks to Felix Ritter.] -Ignore extra elements in link destination arrays. -Accept external Type 1 font files with a suffix of ".ps" or no suffix - at all. -Add a bounds check in the DCT decoder. -Added instructions for building xpdf.exe under cygwin/XFree86. -Tweaked the word separation parameter for raw-mode text extraction. - -2.03 (2003-oct-10) ------------------- -Rewrote the text extractor to: - - do a better job with rotated text; - - handle right-to-left scripts; - - be faster. -Changed the zoom setting to use a percentage (relative to 72 dpi) - instead of a zoom "factor". -If the PDF file has an outline, open the outline pane initially. -Added -f and -l options to pdfinfo; print multiple page sizes. -The HAVE_XTAPPSETEXITFLAG test in XPDFApp.cc was backwards. -The BitsPerComponent entry is optional in image mask objects. -Render any annotation with an appearance stream, instead of just - Widget and Stamp annotations. -Fix a bug in the TrueType font checker: the test for an unsorted - 'loca' table was wrong. -Modify the TrueType cmap selection algorithm yet again to try to match - Adobe's behavior. -Changed sqrt(2) to sqrt(2.0) in pdfinfo.cc to make various compilers - happy. -Fixed a deadlock problem (when MULTITHREADING is set); cleaned up some - other problems with the locking code. -Fixed a bug in the interpolation code for type 0 (sampled) functions. -Implemented type 1 (function-based) shaded fills. -Fixed some stupid bugs in the JBIG2 decoder (introduced with the - previous optimization work). -Fixed a typo in the code that parses vertical font metrics for CID - fonts that was causing a seg fault. -Fixed a couple of bugs that were causing seg faults with badly damaged - PDF files. -Limit the number of nested Forms to avoid infinite recursion (in buggy - PDF files). -Add a special case for rectangular clip regions - make sure these - don't drop pixels on the right and bottom edges. -Tell FreeType not to use glyph bitmaps when in anti-aliased mode. -Read all of the border style info for links. -All of the shaded fill types now do at least one bisection to avoid - problems when the colors at the endpoints of the domain are the - same. -If the Length2 parameter for an embedded Type 1 font was incorrect - (too small), pdftops was losing font data. -Deal with (broken) DCT streams that use the same component ID number - for different components. -The MediaBox page attribute was not being inherited correctly. -Fixed a bug in the Type 1C font converter related to local - subroutines. -The Type 1C -> Type 1 font converter was allocating the font dictionary - one slot too small. -Added a missing private dictionary entry to Type 1 fonts generated by - the Type 1C converter. [Thanks to Michael Shell.] -Fixed bugs in the tiling pattern fill code. -Try the TrueType 0xf000 char code offset hack for the MacRoman - encoding too (in addition to MS Symbol). -Update the font metrics info for the Base 14 fonts to include the Euro - character. -SECURITY HOLE: Escape various characters in URLs before running a web - browser (or movie viewer). [Fixed in 2.02p11] -SECURITY HOLE: In the dialog used to verify "launch" links, provide a - scrolling view if the command to be run is excessively long. [Fixed - in 2.02p11] -Added an option to disable insertion of page breaks (form feed - characters) in extracted text (pdftotext -nopgbrk; xpdfrc - "textPageBreaks" option). -Check for 8-bit fonts that specify an out-of-range FirstChar or - LastChar. -Correctly handle an obsolete Type 2 charstring op (in the Type - 1C-to-Type 1 font converter). [Thanks to Helge Blischke.] -Use the font encoding info to fill in holes in the ToUnicode map. -Added character names for Bulgarian (in the Cyrillic support pacakage) - and Greek. -Handle clipping to text in xpdf and pdftops. -Fix color space detection in DCT decoder. [Thanks to Dwight Kelly.] -Added the "unicodeToUnicode" xpdfrc option, intended (initially) for - Arabic support. -Handle the case in PSOutputDev where two font objects refer to the - same embedded TrueType font, but with different encodings. [Thanks - to Frank Siegert.] -Kill any pre-existing path before drawing a form (or annotation). -Save state before rendering page content; restore state afterward. -Fix Stream::reset/close to work correctly with encoder streams; fix - PSOutputDev to use Stream::close consistently. -Fix a seg fault when hitting the 'back' button after closing a file. -GfxState::getStrokeGray was returning the fill gray value (this only - affected Level 1 PS output). -Change PSOutputDev to reuse dictionaries in Level 1 mode (since Level - 1 PS interpreters don't do garbage collection). [Thanks to Frank - Siegert.] -PSOutputDev was generating incorrect translations for landscape-mode - pages. -Implemented shading pattern color spaces. -PSOutputDev wasn't correctly handling Type 3 fonts which used image - resources (as opposed to inline images). [Thanks to Frank Siegert.] -The fix from 1.00 which clipped out-of-bounds points was a bit too - aggressive. -Do proper Floyd-Steinberg dithering in XOutputDev. -Don't automatically check for a null owner password (to match Adobe's - behavior). -Allow the FlateDecode filter in Level 3 PostScript output. -Fixed small bugs in the Type 1C -> Type 1 converter and Type 1C -> - Type 0 converter. [Thanks to Tom Kacvinsky.] -Work around another weird Motif problem with the right button menu - (which was sometimes causing the menu to not be displayed). -Make the code that handles fonts defined directly in the resource dict - more robust. -Add a brief description of the outline pane to the xpdf man page. -Ignore extra operands to content stream operators. -Fixed a bug in the CCITTFax decoder. -Allow the Count entry in a Pages dictionary to be a real number - (because some PDF generators actually do this). -Shading pattern fills weren't being clipped correctly. -Incorrect shallow copies in GfxRadialShading and StitchingFunction. -The StitchingFunction destructor wasn't checking for funcs being - NULL. -Change the TrueType code-to-GID mapping code so it looks at the - TrueType 'post' table. -Set the print command in the print dialog once at startup, don't - change it each time a file is (re)loaded. -Generate the %%BoundingBox comment in regular PostScript files (not - just EPS files). -Fixed a bug in the Unicode CMap parser. - -3.00 (2004-jan-22) ------------------- -New PDF rasterizer ("Splash"). -Added support for PDF 1.5: - - JPX (JPEG 2000) decoder - - XRef streams - - object streams - - DeviceN color spaces with up to 32 components - - Added new CMaps to the CJK language support packages -Replaced pdftopbm with pdftoppm (which can generate PBM, PGM, and PPM - files). -Reorganized the font file parser code into a new library ("Fofi"). -Removed support for FreeType 1.x. -Removed support for X server fonts - Xpdf (and pdftoppm) will now - search for the URW fonts (from ghostscript). -Changed the "-t1lib" and "-freetype" switches; replaced the - "t1libControl" and "freetypeControl" config file options with - "enableT1lib", "enableFreeType", and "antialias". -Added the "-box" option to pdfinfo. -Added imageable area support to PSOutputDev (for CUPS); added the - "psImageableArea" config file option. -Added the "-nocrop", "-expand", "-noshrink", and "-nocenter" switches - to pdftops; added the "psCrop", "psExpandSmaller", "psShrinkLarger", - and "psCenter" config file options. -Dictionary size was in PostScript code generated for Type 3 fonts. -The PS code generated for images in Type 3 characters was broken. -Tweaked the text extractor. -Accept xref entries that are one byte too short (matching Adobe's - behavior). -Change things so "xpdf -h" and "xpdf -v" work if DISPLAY isn't set. -Fix a problem in the damaged file repair code that handles the trailer - dictionary. -Use the "Last" entries in "Outlines" objects - this avoids a problem - with PDF files generated by buggy software that, e.g., sets the last - item's Next pointer to point to itself. -PSOutputDev was not handling DeviceN color spaces correctly in Level 2 - images. -Fixed a stupid little bug that broke PS output for JBIG2 images. -Work around a Lesstif bug: set up an extra callback so hitting - in the find dialog performs a search. [Thanks to Elliott Hughes.] -Pdftops was crashing on zero page PDF files. -Add an AC_PREREQ call to configure.in. -Change the 'find' dialog so the text entry box resizes with the - dialog. -Skip extraneous zero bits at the start of a CCITTFax stream. -The PostScript text clipping operator was missing a 'newpath'. - [Thanks to Frank Siegert.] -Fix a bug in tiling patterns with bboxes that don't start at (0,0). -Fix a bug in Type 3 font handling with rotated text. -The tiled pattern fill code was destroying the current path, which - broke the fill+stroke operators when the fill color space was a - tiled pattern. -ICCBased color spaces don't always set their Ranges values correctly, - so just use the values from the alternate color space. -Modified GHash to accept int or void* - this avoids some conversion - warnings. -Check for missing Type 3 CharProcs - avoid a segfault. -Pdffonts now marks all Type 3 fonts as embedded. -Outline entries with no Title string weren't being handled correctly, - resulting in segfaults. -PSOutputDev now forces the text horizontal scale factor to be non-zero - to avoid singular font matrices in the PS code. -Tweaked the error recovery in the CCITTFax decoder. -The LZW/Flate predictor should treat any Predictor value (in the - stream dictionary) >= 10 identically. -PSOutputDev and pdffonts check for NULL font objects (which can - happen, e.g., because of missing CMap files). -Swap the left and right mouse wheel button numbers. -EPS output ("pdftops -eps") now uses the CropBox instead of the - MediaBox as the EPS bounding box. - -3.01 (2005-aug-17) ------------------- -Added the continuous view mode, including the '-cont' switch and the - 'continuousView' config file option. -At high zoom levels, don't rasterize the entire page - this avoids - problems running out of memory. -Added "search backward" and "match case" options to the find dialog. -Support explicitly masked images and soft masked images. -Add support to DCTStream for 16-bit quant tables. -Don't segfault if the user clicks on an outline entry with a broken - destination. -Changed the makefiles and configure script to skip building pdftoppm - (in addition to xpdf) if X, Motif, or FreeType is not found; changed - the error message in the configure script to match. -Move an inline function in JArithmeticDecoder.cc to avoid compiler - errors. -Fixed a bug in the rasterizer that was sometimes causing infinite - loops with round line caps on vertical lines. -Various rasterizer optimizations. -Look for intermediate resize events - try to avoid lagging when the - user is doing an opaque resize. -The FormType key in Form XObjects is optional. -Handle external 16-bit TrueType fonts correctly, using the Unicode - cmap. -Add class declarations to TextOutputDev.h to work with stricter C++ - compilers. -Support FreeType's weird include file stuff (ft2build.h, etc.). -Fixed a bug handling empty paths. -Fixed a text positioning problem in PostScript output. -Handle TrueType collections in FoFiTrueType.cc. -FoFiTrueType constructor was reporting a failure if the post table was - bad - this should be non-fatal. -Type 1 font parser was missing a NULL test. -Mask chars passed to isdigit in goo/parseargs.c to avoid problems with - signed chars. -Added more error checking to the CCITTFax decoder. -Fixed a bug (computing the MCU size) in the DCT decoder. -Change a test in the Splash stroke code to avoid x86 floating point - weirdness. -Reorganized the decryption code to allow security handler plugins; - removed the NO_DECRYPTION #ifdefs. -Added a plugin interface, initially just for security handlers. -Support color key masked images and explicitly masked images in PS - output (Level 2 only). -When checking for aliases of the Base 14 fonts, ignore spaces in the - specified font name. -Handle encrypted PDF files that are missing the file ID string. -Handle tiling patterns more efficiently in the PostScript output. -Rewrote the code that handles color spaces in PostScript output. -Fixed a bug in the Type 1C font parser - zero-length indexes (and - zero-length names) weren't handled correctly. -Handle shaded fills more efficiently in the PostScript output. -Implement the remaining shading types (4-7). -Rearranged the Splash color modes. -Add the EarlyChange parameter to LZWStream when generating PostScript. -Check for zero values in line dash arrays in PSOutputDev. -Fixed an uninitialized variable in JArithmeticDecoder which was - causing crashes. -Treat unknown CMap names as identity mappings (to match Adobe's - behavior). -Fixed bugs in the XRef parser related to XRef streams in updated - files. -Added a missing call to FT_Done_Glyph which was causing a memory leak. - [Thanks to Dave Formanek.] -Fixed a bug in text copying that was causing the last word to be - dropped on some pages. -Tweaked the image width/height computation in Splash::drawImage and - Splash::fillImageMask to make striped images work better. -Ignore minus signs in the middle of numbers (to match Adobe's - behavior). -Missing '%s' in format strings for dates in pdftotext '-htmlmeta' - mode. -Change the TrueType code-to-GID mapping code so it looks at the - standard name-to-Unicode mapping before the ToUnicode mapping - defined in the font object. -Added a matteColor setting (command line option and X resource). -Tweaked the CMYK->RGB transform. -Fix some problems in tracking the character position (to match up with - Adobe's highlight file format). -Handle moveto/closepath/stroke correctly. -Check for singular text matrices and font size of zero in PSOutputDev. -Clip PS output to the size of the page (avoiding any gibberish that - lies outside the MediaBox, in the case where the MediaBox is smaller - than the paper). -If the line dash element in an annotation's Border array is of an - invalid type (i.e., not an array), don't draw the link at all (this - matches Adobe's behavior). -Don't remap small caps and oldstyle glyphs in the name-to-Unicode - table - it messes up TrueType font encodings. -Pdftoppm wasn't setting the paper color correctly in mono and gray - modes (this only showed up on big-endian machines). -Missing NULL check was causing crashes when attempting to read non-PDF - files that happened to contain the string '%PDF'. -Fixed a problem in the text extractor that was breaking up words. -Handle vertical text (CJK fonts) in PS output with TrueType fonts that - are missing the vertical metrics tables. -Handle the case where a font object and the corresponding embedded - font are different types. -Handle basic crypt filter functionality. -Added more value checking in the XRef parser, to avoid potential - security problems. -Updated the CJK language support packages: replaced the - displayCIDFontX references with displayCIDFontTT; added pointers to - free TrueType fonts. -Added a missing error message when SplashOutputDev can't parse an - embedded TrueType font file. -PDFCore and TextOutputDev now correctly handle searching for Unicode - strings, including real Unicode case-folding. -Throw away tiling pattern fills that are completely outside the clip - region. -The JPEG 2000 inverse reversible multiple component transform code was - wrong. -Fixed some bugs in shading pattern fills: clipping was wrong, and - background color was not implemented. -Added tool tips for the toolbar buttons. -Decrease the max depth of recursive patch mesh filling if the pattern - has a large number of patches. -Highlight the find text whenever the find dialog is mapped. -Handle page boundary boxes with reversed coordinates. -Fixed a bug in the text extractor code that handles duplicated text. -Optimization work on SampledFunction::transform(). -Use the CropBox instead of the MediaBox as the display region. -Dither for PseudoColor (8-bit) displays. -Fix a bug in DCTStream that was causing an infinite loop with - corrupted DCT image data. -Fix a bug in the ToUnicode CMap parser. -Fix a bug in the text extractor - negative font sizes weren't being - handled correctly. -Fix a bug in the text extractor - in certain cases, out-of-bounds text - could cause crashes (generally only in damaged PDF files). -Fix a read-past-end-of-array bug in the JBIG2 decoder. -Fix a case where pdftops was generating lines longer than 255 chars. -Optimize redraws - don't regenerate the XImage every time redrawRect - is called. -The ASCII85 decoder wasn't skipping whitespace properly. -Optimize text extraction: skip (non-inline) image setup entirely. -Added initial transparency support (stroke/fill alpha and blend mode). -Added support for the overprint setting in PostScript output. -Fixed various buffer overflow bugs. -Handle negative font sizes and horizontal scaling correctly - this - affected PSOutputDev for all text operators, as well as the TJ - operator for all OutputDevs. -Fixed a buffer overflow in the CCITTFax decoder. -Fixed an out-of-order entry in the list of font name aliases. -Fixed a backward loop in the PostScriptFunction code. -Treat a zero-length base URI the same way as a nonexistent base URI. -Add a divide-by-zero check in TextOutputDev (the problem was happening - in cases of mixed horizontal and vertical text). -PSOutputDev wasn't rounding the page bounding box coordinates - correctly. -Support the SOF1 marker in DCT (JPEG) image streams. -Minor changes to GlobalParams.h and JPXStream.h because some compilers - don't like anonymous structs inside anonymous unions. -Xpdf now complains about a negative page number. -Changed GString::cmp and GString::cmpN to correctly handle '\0' chars - in the middle of strings. -Fixed the radial shading code; corrected the handling of the 'extend' - parameters. -Added the gmallocn and greallocn functions. -Fixed a bug in the TIFF image component predictor which shows up with - components that are not 1 or 8 bits wide. -Optimized FlateStream::loadFixedCodes(). -For non-embedded Base-14 fonts, don't use the ascent/descent/bbox - values from the FontDescriptor - various PDF generators get them - wrong. -Fixed a bug in the text extractor - words on the same line (especially - in tables) were being split vertically onto multiple lines. -Automatically select the correct radio button ("print with command" - vs. "print to file") in the print dialog. -Don't create the "open" and "save as" dialogs until needed - this - avoids stat-ing every file in the directory at startup. -Changed the Big5 and Big5ascii encodings (in the traditional Chinese - language support package) to include characters from the Unicode - database (which aren't mentioned in the Adobe character collection - documentation). -Added the '-pagecrop' switch to pdftops. -Tweaked the RGB->gray and CMYK->gray conversion functions to match the - PDF spec. -The JPEG 2000 decoder wasn't correctly handling codeblocks split - across multiple packets/layers. -Fixed a typecast that caused compile errors on 64-bit systems. -The CMap parser wasn't handling the 'cidchar' construct. -Handle the case in PSOutputDev where two font objects refer to the - same embedded 16-bit TrueType font, but with different CIDToGIDMaps. -Changed the configure script to report more accurate warnings when - it can't find X / Motif / FreeType. -Encryption with revision=2 always uses a 40-bit key, regardless of the - specified Length value. -Yet another minor change to the TrueType font encoding deciphering - algorithm. -Don't completely invalidate the Catalog if one (or more) of the page - objects are bogus -- just skip over those pages. -Removed the workaround in pdftops for too-small Length2 values in Type - 1 fonts -- it was causing problems on various PostScript printers. -Started adding error checking to the JBIG2 decoder (this is nowhere - near complete yet). -Extended the "unicodeToUnicode" config option to also apply to CID - fonts. -Added the narrow Latin characters to the Adobe-Korea1.cidToUnicode - file in the Korean language support package. -Fixed the code that handles page rotation in PSOutputDev. -When converting a Type 1C glyph to a Type 1 glyph, insert closepath - operators as appropriate. -Check for a sane 'loca' table in TrueType fonts (FoFiTrueType::parse). -Fix PSOutputDev to correctly handle the case of an empty name in a - font encoding. - -3.02 (2007-feb-27) ------------------- -Added anti-aliasing for vector graphics; added the vectorAntialias - xpdfrc option; added the "-aaVector" switch to xpdf and pdftoppm. -Implemented stroke adjustment (always enabled by default, ignoring the - SA parameter, to match Adobe's behavior), and added the strokeAdjust - xpdfrc command. -Support PDF 1.6 and PDF 1.7. -Added support for AES decryption. -Added support for OpenType fonts (only tested with 8-bit CFF data so - far). -Added user-configurable key/mouse bindings - the bind/unbind xpdfrc - commands. -Cleaned up the full-screen mode code and added the ability to toggle - it on the fly (the default key binding is alt-f). -Pdfimages with the -j option now writes JPEG files for 1-component - (grayscale) DCT images, in addition to 3-component (RGB) images. -Fixed bugs in handling sampled (type 0) functions with 32-bit - samples. -Fixed some things to support DeviceN color spaces with up to 32 - colorants. -Pdftops now constructs the %%Creator and %%Title DSC comments from the - relevant information in the PDF Info dictionary. -Tweak the TrueType font encoding deciphering algorithm. -Added the "mapUnkownCharNames" xpdfrc option. -Fix a bug (that only showed up with certain window managers) in the - intermediate resize event optimization. [Thanks to Michael Rogers.] -Check for a broken/missing embedded font (this was causing xpdf to - crash). -Added support for transfer functions in PostScript output. -Be a bit more tolerant of Link destinations that contain null values - for positioning parameters. -Use ordered dot dithering instead of clustered dot dithering at - resolutions below 300 dpi (for monochrome output). -Fixed security holes (bounds checking issues) in several places. -Don't bother creating a SplashFont (allocating memory) for fonts that - are only used for hidden text - this avoids problems with fonts of - unreasonably large sizes. -Clipping in TextOutputDev was off for characters on the left edge of - the page. -The scn and SCN operators weren't correctly handling colors with more - than four components. -FoFiType1::writeEncoded wasn't always correctly finding the end of the - encoding. -Use the ColorTransform parameter in the DCTDecode stream dictionary. -Type 3 fonts are allowed to have a bbox of [0 0 0 0], which means - "unspecified" -- don't issue error messages in that case. -Perform the transform (to device space) in Splash instead of in - SplashOutputDev -- this is needed to correctly handle round joins - and caps on stroked paths. -PSOutputDev now rasterizes any pages that use transparency. -Limit the crop, bleed, trim, and art boxes to the edges of the media - box (per the PDF spec). -Change GString to increase the allocation increment by powers of two. -Handle whitespace in hex strings in CMap files/streams. -Use strings instead of names for separation colorant names in - PSOutputDev. -For explicitly masked images where the mask is higher resolution than - the image, use the soft mask code. -Avoid problems with very large x-steps in the PostScript output for - tiling pattern fills. -Avoid a divide-by-zero in stitching functions which have a subfunction - with empty bounds. -Honor the "Hidden", "NoView", and "Print" flags on annotations. -Rewrote the pixel rendering code in Splash to use a single set of - pixel pipeline functions. -Added support for transparency groups and soft masks. -Fixed the transparency blend functions to match the addendum published - by Adobe. -Changed Splash/SplashBitmap to store alpha in a separate plane. -Setting the color space now selects the correct default color for that - color space. -Remove the mutex lock from GlobalParams::getErrQuiet() to avoid a - deadlock when parseCIDToUnicode() or parseUnicodeToUnicode() calls - it from inside a locked section. -Added error checking (on the argument count) in the sc/SC/scn/SCN - operators. -Skip over notdef glyphs in TrueType fonts (which sometimes get drawn - as little boxes), to match Adobe's behavior. -Painting operations in a Separation color space with the "None" - colorant or a DeviceN color space with all colorants set to "None" - never mark the page. -Fixed an obscure bug in the JPX decoder - it wasn't reading the extra - stuffing byte in the case where the last byte of a packet header was - 0xff. -Change the TrueType font parser (FoFiTrueType) to change the glyph - count rather than report an error if the 'loca' table is too small. -Fixed a couple of bugs in the JBIG2 decoder. -Added stochastic clustered dot dithering. -Added the screenType, screenSize, screenDotRadius, screenGamma, - screenBlackThreshold, and screenWhiteThreshold xpdfrc settings. -PSOutputDev now correctly handles invalid Type 3 charprocs which don't - start with a d0 or d1 operator -FreeType 2.2.x support - get rid of the FT_INTERNAL_OBJECTS_H include, - and add some 'const' declarations. -Handle PDFDocEncoding in Info dictionary strings. -Tweak the xref repair code - ignore whitespace at the start of lines - when looking for objects. -Added the "-exec" switch to xpdf. -Removed the xpdf.viKeys X resource. -Changed the color key / explicit masked image code in PSOutputDev to - generate better PS code, including a Level 3 option. -Tweaked the DEBUG_MEM code for performance. -Move the JBIG2 global stream reading code into reset() instead of the - constructor - this way, pdftotext doesn't end up reading the global - stream. -Added the "-preload" option to pdftops and the psPreload xpdfrc - command. -Added the "zoom to selection" command (on the popup menu). -Fix a bug (in xpdf/pdftoppm/pdftops) with tiling patterns whose bbox - size is different from their xStep/yStep. -Implemented stroke with pattern color spaces. -Following a link to a page whose CropBox was different from the - MediaBox was resulting in an incorrect scroll position. -Parse truncated date strings from the Info dictionary correctly. -Change FoFiType1 to handle Type 1 fonts with two /Encoding keys. -Extend the PSOutputDev shaded fill code to handle DeviceCMYK shaded - fills in level2sep and level3sep modes. -Detect infinite loops in the Page tree. -Optimized the ASCII85Encoder code. -Tweaked the text extractor to do a better job of lining up rows of - text. -Leave images compressed (or re-compress them with RLE) in PostScript - output when setting up images for forms and Type 3 fonts (or with - -preload). -Extend FoFiType1 to handle Type 1 fonts with octal character codes in - their encodings. -Use a custom string formatter to avoid problems with locale-based decimal - formatting (commas instead of periods) in PS output. -Allow comments in PostScript-type functions. -Change the TrueType font parser (FoFiTrueType) to delete glyf table - entries that are too short. - -3.03 (????-???-??) ------------------- -Links with the underlined border style were being drawn with the lines - over, instead of under, the text. -Add #include to XPDFTree.cc (to avoid problems with certain - compilers). -Change XRef::fetch() to avoid infinite loops caused by odd damage to - the xref table (e.g., where a stream object's "Length" value is an - indirect reference that points to another stream object). -Minor fix in GString.cc to deal with an error in newer C++ compilers - (pow() can take int or double args). -Added the "fixed pitch" text extraction mode. -Fix the handling of mismatches between font type and font file type to - avoid crashes. -In text extractor, don't drop horizontally overlapping words onto a - separate line. -The numbers in the operand to the TJ operator should be multiplied by - the current horizontal scaling parameter. -Fixed a bug in the Type 1C-to-Type 1 font converter -- need to escape - strings in the font dictionary. -The zero-font-size check in PSOutputDev.cc was broken. -Fixes for the form field appearance regeneration code: handle Unicode - strings (by downconverting to Latin1); check for "True" in addition - to "Yes" as a button value. -Modify XPDFTree to limit the widget height to 32767 pixels -- this - avoids crashes with very large outlines. -Modify FoFiType1 to handle PFB headers in Type 1 font files. -Allow image mask decode arrays to be [1.0 0.0] in addition to [1 0]. -Tweak the form field appearance regeneration code. -PSOutputDev now sets up resources for DR dictionaries in forms (in - case the form field appearances are regenerated). -For TrueType fonts which are marked symbolic, the cmaps should be - ignored. -Change the handling of numeric characters in Unicode text output -- - they are now treated as left-to-right, which isn't strictly correct, - but does result in correct visual formatting. -Modify FoFiTrueType to handle bogus loca table entries where the - offset is past the end of the glyf table. -Performance: cache tiling patterns. -Fixed shading pattern fills to do clipping and background fills - correctly. -Change the code that reads the page tree to be more flexible with - regard to improperly constructed trees. -Changed the PostScript header comment from "Produced by xpdf/pdftops - x.yy" to "XpdfVersion: x.yy" to make it (mostly) DSC-compliant. -Fixed PSOutputDev to handle page rotation correctly where the PDF page - is rotated 90 or 270 degrees and the page width (before rotation) is - greater than its height (and vice versa for 0 or 180 degrees). -Unbalanced save/restores inside form XObjects (which can be happen in - damaged or incorrectly constructed PDF files) could cause crashes. -The CCITTFax decoder could go into an infinite loop on certain types - of corrupt input. -Added the "drawAnnotations" xpdfrc command. -Added the "psUncompressPreloadedImages" xpdfrc command. -Escape newlines and other non-printable characters in the custom color - DSC comments in PostScript output. -Added the tilingPatternFill and *ShadedFill functions to - PreScanOutputDev to speed it up. -Too many elements in an image's Decode array should not be a fatal - error. -Fixed a buffer overflow security hole in StreamPredictor. -Implemented text fills with pattern color spaces. -Empty pages (zero-length content streams and null contents) were - causing crashes in continuous view mode. -Handle line dash arrays that start with a zero element correctly. -PreScanOutputDev was not correctly detecting all transparency - in - some places, it was looking only at the blending mode, and not at - the opacity setting. -Force halftone screen size to be a power of 2. This allows optimizing - the halftoning code. -Fixed a bug in the JBIG2 MMR decoder (and also in the CCITTFax - decoder) that was causing array references with negative indexes. -Fixed a bug in the transparency code that was causing memory overruns. -Fixed a 64-bit bug in the ASCII85 encoder. -The focusToPageNum was crashing in full-screen mode - it should simply - do nothing. -Added '%p' (current page number) to the available options for the 'run' - command. -Tweak the behavior with PDF files that have pages of different widths - in continuous mode: scroll horizontally to avoid blank space on the - left side (when changing pages via entering a page number or - clicking on a link). -A closepath followed by a lineto should create a new subpath for the - lineto. -Rewrote the image and image mask rendering code to be more accurate - and faster. -Fixed a buffer overflow in the CCITTFax decoder. -Adobe Acrobat appears to ignore the flatness setting when rasterizing - curves, so Xpdf now does the same. (Oddly, Acrobat passes the - flatness setting through to PostScript output, which ends up making - the PS file look different from the PDF file - so Xpdf continues to - pass flatness through to PS files, too.) -Pdfimages now ignores tiling pattern fills (for performance reasons). -Fixed a bug in PDFCore that could sometimes cause crashes at high zoom - levels. -Use std::sort (with functors) in place of qsort (if available) - this - can be significantly faster. -Hitting "close" while Xpdf is in full-screen mode (with only one file - open) was crashing. -Tweak the TrueType font encoding deciphering algorithm. -Rewrote the CCITTFax decoder inner loop - this fixes a security hole. -Fixed two security holes (missing bounds checks) in the DCT decoder. -Do the correct zooming for "Fit" and "FitR" destinations. -Implement the rotation value in the form field appearance regeneration - code. -When PSOutputDev rasterizes a page (because it contains transparency), - the image is broken into stripes if it is above a size threshold. -Don't clip the other page boxes to the MediaBox at the intermediate - (Pages) nodes; only do it at the leaf (Page) nodes - the other boxes - can be specified before the MediaBox is specified. -Split several special cases off from Splash::pipeRun, for performance. -Implemented embedded CMap streams. -Add a sanity check for excessively large font sizes (which caused - problems because Xpdf tried to allocate memory for a font cache). -Fixed a bug in the GfxCIDFont constructor involving reading the - vertical metrics. -Rewrote the code that handles annotation transforms - it was not - handling non-rectangular transforms correctly. -Tweak the Type 3 bbox code to allow some slack on the left/bottom - edges, as well as the top/right edges. -Fixed a bug that was causing problems rendering Type 3 fonts to 1-bit - monochrome output. -Handle the case where AES padding is invalid. -Changed XRef::getNumObjects to return the number of used entries, - instead of the same value as returned by XRef::getSize(). -Ignore bogus entries in the TrueType table directory instead of - immediately giving up on the font. -Fixed a bug in the radial shading code that could cause divide-by-zero - errors. -Tweaked the TrueType font fixup code to deal with an extra zero entry - at the end of the loca table. -Added the 'setSelection' command. -Increased font cache sizes to improve performance. -Added the 'rotateCCW' and 'rotateCW' commands. -Tweaked the TrueType notdef kludge to skip the notdef glyph only if it - was caused by a character for which a Unicode/MacRoman mapping could - not be found. -Added the 'psFontPassthrough' xpdfrc command. -Added another font size sanity check, this time for Type 3 glyphs. -Added initial support for optional content (layers) - no GUI yet. -For CID fonts that specify the 'Adobe-Identity' or 'Adobe-UCS' - collection, use an identity mapping for char code-to-Unicode - conversion. -Updated the error function to take a category argument, and to use - GString::format instead of printf; added an error callback. -The PDF spec claims that names are limited to 127 chars, but Distiller - 8 will produce longer names, and Acrobat 8 will accept longer names - -- Xpdf will now handle them, too. -Change the Catalog code so it doesn't load the entire page tree at - startup (this only helps the command line tools - the viewer scans - all of the pages at startup). -Clip opacity values to the range [0,1]. -Handle glyph names of the form 'unixxxx' (similar to Ann, Axx, etc.). -Resolution of rasterized pages in PostScript output was not being - computed correctly (resulting in overly large images). -Extend the mapUnknownCharNames config command to cover CID fonts. -Zero-length segments in the middle of stroked paths were not being - handled correctly -- they should be completely ignored, except for - the special case of a zero-length path with round line caps. -Various optimizations to the Splash rasterizer. -Allow "Identity" and "Default" as the transfer function in soft masks. -Tweaked the ToUnicode CMap parser to allow <00xx> char codes for 8-bit - fonts. -TextPage::clear() was not clearing the lists of underlines and links. -Changed the CCITTFax decoder to correctly handle the interaction - between the EndOfLine and EncodedByteAlign parameters. -Fixed a bug where xpdf wouldn't go to a destination specified on the - command line, if continuous mode was enabled - (xpdf -cont file.pdf +foo). -Fixed a bug in the FreeType interface code which was causing incorrect - positioning/sizing of characters. -Tweaked the FreeType interface code - use 'light' hinting with Type 1 - fonts (because it generally looks better). -Tweak the Windows font searching code to handle "Black" fonts. -Fixed a bug in the PostScript-type function parser -- real numbers - that start with a decimal point weren't being handled correctly. -Changed the way filled-and-stroked text is handled -- use Splash to do - both the fill and the stroke (rather than using the font ending to - do the fill and Splash to do the stroke); also turn off stroke - adjustment when drawing stroked text. -Added the "launchCommand" xpdfrc command. -Ignore generation numbers on compressed objects (to match Adobe's - behavior). -Changed the PostScript PageSize policy from 3 to 6 (choose next - largest paper size, don't rescale). -Check that the mask values for color key masked images are in range -- - both Ghostscript and Distiller choke on the PostScript if invalid - mask colors are specified. -Fixed a bug in generic region decoding in the JBIG2 decoder. -Fixed the lexer to handle large real numbers correctly. -Pdftops wasn't correctly handling tiling patterns that use both fill - and stroke operators. -Report an error if the Size array in a sampled function includes any - zeros. -The PostScriptFunction.codeString field wasn't being initialized - correctly. -Invalid object streams were not being handled correctly. -Check for loops in xref tables. -Handle the case where a content stream ends after the 'ID' operator - which starts inline image data. -Check for invalid object streams (i.e., an object stream can't be - inside another object stream. -Add a recursion limit to the object parser - this avoids stack - overflows with various sorts of damaged PDF files. -Handle various parameter settings in the extended graphics state - dictionary. -An invalid document outline (missing fields) could cause a crash. -Added an overprint preview mode (for CMYK output only). -Correctly handle FitH/BH/V/BV link destinations that contain null - values for positioning parameters. -If the PDF file doesn't define a BaseURI, set one based on the - location of the PDF file -- this allows relative links to be handled - correctly. -Use ResusableStreamDecode when generating Level 3 PostScript for an - explicitly masked image. -Tweak the Type 1 font parser to handle encodings with multiple - characters on one line. -Invert subtractive color components before passing them to the - blending function. -Fix an invalid array access in SplashOutputDev::setSoftMask() in CMYK - mode. -A PS interpreter may attempt to read past the end of a preloaded - image, so we need to check for that. -Fixed several overflow/uninit bugs in JBIG2Stream. -Changed the behavior of "pdftops -paper match" to set the paper size - independently for each page, to match the PDF page size. -Fix the CCITTFax decoder to correctly find end-of-file (RTC/EOFB) - markers when the EndOfLine parameter is false. -Don't limit the startxref offset to 10 digits - some PDF generators - use extra leading zeros. -Use the "DV" (default value) field in text annotations if the "V" - (value) field is missing. -Modified "pdftops -paper match" to handle PDF files with - different-sized pages, i.e., it will now select the matching paper - size on a page-by-page basis. -Increase the number of digits printed for floating point numbers in - PostScript output -- it was running into numerical accuracy problems - on large pages. -Fixed integer overflow bugs in Catalog.cc and GfxFont.cc. -Zero-length tables in TrueType fonts should be treated as missing. -ToUnicode CMaps map char codes to Unicode; .cidToUnicode files map - CIDs to Unicode -- ToUnicodeCMaps were being handled incorrectly. -Added the "psRasterResolution" and "psRasterMono" xpdfrc commands. -Added code to FoFiTrueType to check for entries in the table directory - with bogus tags -- this handles the case where the number of tables - given in the header is too high. -Negative shift values in the PostScript bitshift operator were being - handled incorrectly. -GfxICCBasedColorSpace was not correctly bounds-checking the number of - components. -Check SampledFunction input values for NaNs. -Fix a divide-by-zero when the page width or height is zero. -Fix a bug positioning text in PostScript output - if the last char in - a string has an incorrect width in the PDF font object, that messes - up the total string width, so we have to position individual chars. -In PostScript output, if CID font substitution fails, drop all text in - that font. -Handle PDF files that set the stream/string decryption filters to - Identity (i.e., no encryption). -Avoid passing a zero font size to FreeType. -Tweak raw mode in the text extractor to handle words on the same line - drawn in the wrong order. -Pdftops was generating a singular transform matrix for annotations - whose bounding boxes had zero width or height. -Handle embedded fonts which are declared with the wrong font type. -Handle embedded OpenType CFF fonts with CIDToGIDMaps. -Remove the old kludge from PSOutputDev that was converting char 32 - from ".notdef" to "space". -Allow CCITTFax images to be more than 32k pixels wide. -Modified the CMap parser to handle usecmap with Identity-H/V. -Added some parameter checking in the JPX decoder. -Added checks for infinite loops in PDF objects - for color spaces, - functions, optional content, and outline items. -Add support for mouse button bindings up to button 32 (old limit was - 7). -Fixed a bug in the decryption code for revision 3 with keyLength < 16 - -- the owner password was not being handled correctly. [Thanks to - Matthias Franz.] -Add ability for pdftoppm to write to stdout. -Optimize SampledFunction: pull index computation code out of the - transform function; cache the last transform. -Implemented alpha-type soft masks. -Tweaked the font naming algorithm in PSOutputDev. -Treat mirrored (as opposed to rotated) text the same as upright text - in pdftotext. -Fixed buffer overflows in Splash and SplashBitmap. -Added "Form: AcroForm|XFA|none" to pdfinfo output. -Added support for image masks filled with pattern color spaces. diff --git a/thirdparty/xpdf/3.02/src/INSTALL b/thirdparty/xpdf/3.02/src/INSTALL deleted file mode 100644 index 6c6db871..00000000 --- a/thirdparty/xpdf/3.02/src/INSTALL +++ /dev/null @@ -1,248 +0,0 @@ -Xpdf -==== - -version 3.02 -2007-feb-27 - -The Xpdf software and documentation are -copyright 1996-2007 Glyph & Cog, LLC. - -Email: derekn@foolabs.com -WWW: http://www.foolabs.com/xpdf/ - - -Compiling xpdf --------------- - -Xpdf is written in C++ (with a little bit of C). It should work with -any ANSI-compliant C++ and C compilers. The systems and compilers -it's been tested with are listed on the xpdf web page. - -Xpdf requires the Motif (or Lesstif) toolkit. - -The following notes give specific instructions for compiling on -different systems. - - -************** -*** UNIX *** -************** - -* Install t1lib (if desired). The resulting library (libt1) and - include files (t1lib.h and t1libx.h) should be placed somewhere on - the standard search paths. Alternatively, when you configure xpdf, - you can use the following options to tell configure where to find - the t1lib files: - - --with-t1-library=PATH - --with-t1-includes=PATH - -* Install FreeType 2 (this is required). WARNING: You must have - version 2.0.5 or newer. Some older versions of XFree86 ship with an - older version of FreeType, which means you'll need to explicitly set - include and library paths to get the correct version: - - --with-freetype2-library=PATH - --with-freetype2-includes=PATH - - (The include path is the directory which contains the freetype2 - directory, i.e., do NOT include "freetype2" in the - --with-freetype2-includes path. For example, with the default - installation, the library path is /usr/local/lib and the include - path is /usr/local/include/freetype2.) - -* If you have Motif (or Lesstif) installed in a non-standard place, - you can use the following options to tell configure where to find - it: - - --with-Xm-library=PATH - --with-Xm-includes=PATH - -* Run the configure script: - - ./configure - - This should produce a set of makefiles customized for your system. - The configure script accepts the following options (in addition to - the usual things accepted by autoconf configure scripts): - - --prefix=PREFIX - Changes the directory where xpdf is installed. The default is - /usr/local. - - --enable-a4-paper - Switches the default paper size for PostScript output (xpdf - and pdftops) to A4. The default is Letter size. - - --enable-no-text-select - With this option, xpdf will not copy text. (This is only - useful on closed systems where the user can't get at the PDF - file directly.) - - --enable-opi - Enables support for generation of OPI (Open Prepress - Interface) comments with pdftops. - - --sysconfdir=DIR - Look for the system-wide xpdfrc config file in this directory. - The default is PREFIX/etc. - - --with-appdef-dir=DIR - Use the specified app-defaults directory. The default is - /usr/lib/X11/app-defaults. - - If you need to pass specific options to the C and/or C++ compiler, - you can set the CFLAGS and/or CXXFLAGS environment variables before - running the configure script. Any options given that way will be - added to the CFLAGS/CXXFLAGS used by all of the Xpdf makefiles. - -* Type 'make'. This should build the executables: - - xpdf/xpdf - xpdf/pdftops - xpdf/pdftotext - xpdf/pdfinfo - xpdf/pdffonts - xpdf/pdftoppm - xpdf/pdfimages - -* If desired, type 'make install' to install the binaries and man - pages. - -The old Makefile.config and Makefiles are no longer provided or -supported. If you really want to manually configure Xpdf (which is -not recommended), the files that need to be created are aconf.h, -Makefile, goo/Makefile, fofi/Makefile, splash/Makefile, and -xpdf/Makefile, all of which are generated from the corresponding '.in' -files. - -If you want to run a quick test, there is a tiny PDF file included -with xpdf, as misc/hello.pdf . - - -************* -*** VMS *** -************* - -* The 'stddef.h' include file which comes with older versions of gcc - may be missing a definition for wchar_t. In this case, add the - following lines: - ----- - File GNU_CC:[INCLUDE]STDDEF.H;2 - 44 /* Wide characters, not yet supported by VAXCRTL [match VAXC's >> - -dnl ####################### -*- Mode: M4 -*- ########################### -dnl smr.m4 -- -dnl -dnl Copyright (C) 1999 Matthew D. Langston -dnl Copyright (C) 1998 Steve Robbins -dnl -dnl This file is free software; you can redistribute it and/or modify it -dnl under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2 of the License, or -dnl (at your option) any later version. -dnl -dnl This file is distributed in the hope that it will be useful, but -dnl WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -dnl General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this file; if not, write to: -dnl -dnl Free Software Foundation, Inc. -dnl Suite 330 -dnl 59 Temple Place -dnl Boston, MA 02111-1307, USA. -dnl #################################################################### - - -dnl NOTE: The macros in this file are extensively documented in the -dnl accompanying `smr_macros.texi' Texinfo file. Please see the -dnl Texinfo documentation for the definitive specification of how -dnl these macros are supposed to work. If the macros work -dnl differently than the Texinfo documentation says they should, -dnl then the macros (and not the Texinfo documentation) has the -dnl bug(s). - -dnl This is a convenient macro which translates illegal characters for -dnl bourne shell variables into legal characters. It has the same -dnl functionality as sed 'y%./+-:%__p__%'. -AC_DEFUN([smr_safe_translation], [patsubst(patsubst([$1], [+], [p]), [./-:], [_])]) - -AC_DEFUN(smr_SWITCH, -[ - dnl Define convenient aliases for the arguments since there are so - dnl many of them and I keep confusing myself whenever I have to edit - dnl this macro. - pushdef([smr_name], $1) - pushdef([smr_help_string], $2) - pushdef([smr_default], $3) - pushdef([smr_yes_define], $4) - pushdef([smr_no_define], $5) - - dnl Do some sanity checking of the arguments. - ifelse([regexp(smr_default, [^\(yes\|no\)$])], -1, [AC_MSG_ERROR($0: third arg must be either yes or no)]) - - dnl Create the help string - pushdef([smr_lhs], [--ifelse(smr_default, yes, disable, enable)-smr_name])dnl - pushdef([smr_rhs], [ifelse(smr_default, yes, disable, enable) smr_help_string (default is smr_default)])dnl - - dnl Add the option to `configure --help'. We don't need to supply the - dnl 4th argument to AC_ARG_ENABLE (i.e. the code to set the default - dnl value) because that is done below by AC_CACHE_CHECK. - AC_ARG_ENABLE([smr_name], - AC_HELP_STRING([smr_lhs], [smr_rhs]), - smr_cv_enable_[]smr_name=$enableval) - - dnl We cache the result so that the user doesn't have to remember - dnl which flags they passed to `configure'. - AC_CACHE_CHECK([whether to enable smr_help_string], - smr_cv_enable_[]smr_name, - smr_cv_enable_[]smr_name=smr_default) - - ifelse(smr_yes_define, , , test x"[$]smr_cv_enable_[]smr_name" = xyes && AC_DEFINE(smr_yes_define)) - ifelse(smr_no_define, , , test x"[$]smr_cv_enable_[]smr_name" = xno && AC_DEFINE(smr_no_define)) - - dnl Sanity check the value assigned to smr_cv_enable_$1 to force it to - dnl be either `yes' or `no'. - if test ! x"[$]smr_cv_enable_[]smr_name" = xyes; then - if test ! x"[$]smr_cv_enable_[]smr_name" = xno; then - AC_MSG_ERROR([smr_lhs must be either yes or no]) - fi - fi - - popdef([smr_name]) - popdef([smr_help_string]) - popdef([smr_default]) - popdef([smr_yes_define]) - popdef([smr_no_define]) - popdef([smr_lhs]) - popdef([smr_rhs]) -]) - - -AC_DEFUN(smr_ARG_WITHLIB, -[ - dnl Define convenient aliases for the arguments since there are so - dnl many of them and I keep confusing myself whenever I have to edit - dnl this macro. - pushdef([smr_name], $1) - pushdef([smr_libname], ifelse($2, , smr_name, $2)) - pushdef([smr_help_string], $3) - pushdef([smr_safe_name], smr_safe_translation(smr_name)) - - dnl Add the option to `configure --help'. We don't need to supply the - dnl 4th argument to AC_ARG_WITH (i.e. the code to set the default - dnl value) because that is done below by AC_CACHE_CHECK. - AC_ARG_WITH(smr_safe_name-library, - AC_HELP_STRING([--with-smr_safe_name-library[[=PATH]]], - [use smr_name library ifelse(smr_help_string, , , (smr_help_string))]), - smr_cv_with_[]smr_safe_name[]_library=$withval) - - dnl We cache the result so that the user doesn't have to remember - dnl which flags they passed to `configure'. - AC_CACHE_CHECK([whether to use smr_name library], - smr_cv_with_[]smr_safe_name[]_library, - smr_cv_with_[]smr_safe_name[]_library=maybe) - - - case x"[$]smr_cv_with_[]smr_safe_name[]_library" in - xyes | xmaybe) - smr_safe_name[]_LIBS="-l[]smr_libname" - with_[]smr_safe_name=[$]smr_cv_with_[]smr_safe_name[]_library - ;; - xno) - smr_safe_name[]_LIBS= - with_[]smr_safe_name=no - ;; - *) - if test -f "[$]smr_cv_with_[]smr_safe_name[]_library"; then - smr_safe_name[]_LIBS=[$]smr_cv_with_[]smr_safe_name[]_library - elif test -d "[$]smr_cv_with_[]smr_safe_name[]_library"; then - smr_safe_name[]_LIBS="-L[$]smr_cv_with_[]smr_safe_name[]_library -l[]smr_libname" - else - AC_MSG_ERROR([argument must be boolean, file, or directory]) - fi - with_[]smr_safe_name=yes - ;; - esac - - popdef([smr_name]) - popdef([smr_libname]) - popdef([smr_help_string]) - popdef([smr_safe_name]) -]) - - -AC_DEFUN(smr_ARG_WITHINCLUDES, -[ - dnl Define convenient aliases for the arguments since there are so - dnl many of them and I keep confusing myself whenever I have to edit - dnl this macro. - pushdef([smr_name], $1) - pushdef([smr_header], $2) - pushdef([smr_extra_flags], $3) - pushdef([smr_safe_name], smr_safe_translation(smr_name)) - - dnl Add the option to `configure --help'. We don't need to supply the - dnl 4th argument to AC_ARG_WITH (i.e. the code to set the default - dnl value) because that is done below by AC_CACHE_CHECK. - AC_ARG_WITH(smr_safe_name-includes, - AC_HELP_STRING([--with-smr_safe_name-includes[[=DIR]]], - [set directory for smr_name headers]), - smr_cv_with_[]smr_safe_name[]_includes=$withval) - - dnl We cache the result so that the user doesn't have to remember - dnl which flags they passed to `configure'. - AC_CACHE_CHECK([where to find the smr_name header files], - smr_cv_with_[]smr_safe_name[]_includes, - smr_cv_with_[]smr_safe_name[]_includes=) - - if test ! x"[$]smr_cv_with_[]smr_safe_name[]_includes" = x; then - if test -d "[$]smr_cv_with_[]smr_safe_name[]_includes"; then - smr_safe_name[]_CFLAGS="-I[$]smr_cv_with_[]smr_safe_name[]_includes" - else - AC_MSG_ERROR([argument must be a directory]) - fi - else - smr_safe_name[]_CFLAGS= - fi - - dnl This bit of logic comes from the autoconf AC_PROG_CC macro. We - dnl need to put the given include directory into CPPFLAGS temporarily, - dnl but then restore CPPFLAGS to its old value. - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS [$]smr_safe_name[]_CFLAGS smr_extra_flags" - - dnl If the header file smr_header exists, then define - dnl HAVE_[]smr_header (in all capitals). - AC_CHECK_HEADERS([smr_header], - smr_have_[]smr_safe_name[]_header=yes, - smr_have_[]smr_safe_name[]_header=no) - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - popdef([smr_name]) - popdef([smr_header]) - popdef([smr_extra_flags]) - popdef([smr_safe_name]) -]) - - -AC_DEFUN(smr_CHECK_LIB, -[ - dnl Define convenient aliases for the arguments since there are so - dnl many of them and I keep confusing myself whenever I have to edit - dnl this macro. - pushdef([smr_name], $1) - pushdef([smr_libname], ifelse($2, , smr_name, $2)) - pushdef([smr_help_string], $3) - pushdef([smr_function], $4) - pushdef([smr_header], $5) - pushdef([smr_extra_libs], $6) - pushdef([smr_extra_flags], $7) - pushdef([smr_prototype], $8) - pushdef([smr_safe_name], smr_safe_translation(smr_name)) - - dnl Give the user (via "configure --help") an interface to specify - dnl whether we should use the library or not, and possibly where we - dnl should find it. - smr_ARG_WITHLIB([smr_name], [smr_libname], [smr_help_string]) - - if test ! x"$with_[]smr_safe_name" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - dnl If the caller of smr_CHECK_LIB specified a header file for this - dnl library, then give the user (via "configure --help") an - dnl interface to specify where this header file can be found (if it - dnl isn't found by the compiler by default). - ifelse(smr_header, , , [smr_ARG_WITHINCLUDES(smr_name, smr_header, smr_extra_flags)]) - - # We need only look for the library if the header has been found - # (or no header is needed). - if test [$]smr_have_[]smr_safe_name[]_header != no; then - - AC_CHECK_LIB(smr_libname, - smr_function, - smr_have_[]smr_safe_name[]_library=yes, - smr_have_[]smr_safe_name[]_library=no, - [$]smr_safe_name[]_CFLAGS [smr_extra_flags] [$]smr_safe_name[]_LIBS [smr_extra_libs], - [ifelse(smr_prototype, , , [[#]include ])], - smr_prototype) - fi - - if test x"[$]smr_have_[]smr_safe_name[]_library" = xyes; then - AC_MSG_RESULT([using smr_name library]) - else - smr_safe_name[]_LIBS= - smr_safe_name[]_CFLAGS= - - if test x"$with_[]smr_safe_name" = xmaybe; then - AC_MSG_RESULT([not using smr_name library]) - else - AC_MSG_WARN([requested smr_name library not found!]) - fi - fi - fi - - popdef([smr_name]) - popdef([smr_libname]) - popdef([smr_help_string]) - popdef([smr_function]) - popdef([smr_header]) - popdef([smr_extra_libs]) - popdef([smr_extra_flags]) - popdef([smr_prototype]) - popdef([smr_safe_name]) -]) diff --git a/thirdparty/xpdf/3.02/src/aconf-dj.h b/thirdparty/xpdf/3.02/src/aconf-dj.h deleted file mode 100644 index 24492dfe..00000000 --- a/thirdparty/xpdf/3.02/src/aconf-dj.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * aconf-dj.h - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF_H -#define ACONF_H - -/* - * Use A4 paper size instead of Letter for PostScript output. - */ -#undef A4_PAPER - -/* - * Do not allow text selection. - */ -#undef NO_TEXT_SELECT - -/* - * Include support for OPI comments. - */ -#undef OPI_SUPPORT - -/* - * Directory with the Xpdf app-defaults file. - */ -#undef APPDEFDIR - -/* - * Full path for the system-wide xpdfrc file. - */ -#undef SYSTEM_XPDFRC - -/* - * Various include files and functions. - */ -#define HAVE_DIRENT_H 1 -#undef HAVE_SYS_NDIR_H -#undef HAVE_SYS_DIR_H -#undef HAVE_NDIR_H -#undef HAVE_SYS_SELECT_H -#undef HAVE_SYS_BSDTYPES_H -#undef HAVE_STRINGS_H -#undef HAVE_BSTRING_H -#define HAVE_POPEN 1 -#undef HAVE_MKSTEMP -#undef SELECT_TAKES_INT -#define HAVE_STD_SORT 1 -#undef HAVE_FSEEK64 - -/* - * This is defined if using libXpm. - */ -#undef HAVE_X11_XPM_H - -/* - * This is defined if using t1lib. - */ -#undef HAVE_T1LIB_H - -/* - * One of these is defined if using FreeType (version 1 or 2). - */ -#undef HAVE_FREETYPE_H -#undef HAVE_FREETYPE_FREETYPE_H - -/* - * This is defined if using FreeType version 2. - */ -#undef FREETYPE2 - -/* - * This is defined if using libpaper. - */ -#undef HAVE_PAPER_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/aconf-win32.h b/thirdparty/xpdf/3.02/src/aconf-win32.h deleted file mode 100644 index 240d0460..00000000 --- a/thirdparty/xpdf/3.02/src/aconf-win32.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * aconf-win32.h - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF_H -#define ACONF_H - -#include - -/* - * Use A4 paper size instead of Letter for PostScript output. - */ -#undef A4_PAPER - -/* - * Do not allow text selection. - */ -#undef NO_TEXT_SELECT - -/* - * Include support for OPI comments. - */ -#undef OPI_SUPPORT - -/* - * Enable multithreading support. - */ -#define MULTITHREADED 1 - -/* - * Enable C++ exceptions. - */ -#define USE_EXCEPTIONS 1 - -/* - * Enable word list support. - */ -#undef TEXTOUT_WORD_LIST - -/* - * Use fixed point (instead of floating point) arithmetic. - */ -#undef USE_FIXEDPOINT - -/* - * Directory with the Xpdf app-defaults file. - */ -#undef APPDEFDIR - -/* - * Full path for the system-wide xpdfrc file. - */ -#undef SYSTEM_XPDFRC - -/* - * Various include files and functions. - */ -#undef HAVE_DIRENT_H -#undef HAVE_SYS_NDIR_H -#undef HAVE_SYS_DIR_H -#undef HAVE_NDIR_H -#undef HAVE_SYS_SELECT_H -#undef HAVE_SYS_BSDTYPES_H -#undef HAVE_STRINGS_H -#undef HAVE_BSTRING_H -#undef HAVE_POPEN -#undef HAVE_MKSTEMP -#undef HAVE_MKSTEMPS -#undef SELECT_TAKES_INT -#define HAVE_STD_SORT 1 -#undef HAVE_FSEEKO -#undef HAVE_FSEEK64 -#undef _FILE_OFFSET_BITS -#undef _LARGE_FILES -#undef _LARGEFILE_SOURCE -#undef HAVE_XTAPPSETEXITFLAG - -/* - * This is defined if using libXpm. - */ -#undef HAVE_X11_XPM_H - -/* - * This is defined if using t1lib. - */ -#undef HAVE_T1LIB_H - -/* - * One of these is defined if using FreeType (version 1 or 2). - */ -#undef HAVE_FREETYPE_H -#define HAVE_FREETYPE_FREETYPE_H 1 - -/* - * This is defined if using FreeType version 2. - */ -#define FREETYPE2 - -/* - * This is defined if using libpaper. - */ -#undef HAVE_PAPER_H - -/* - * Enable support for loading plugins. - */ -#undef ENABLE_PLUGINS - -/* - * Defined if the Splash library is avaiable. - */ -#undef HAVE_SPLASH - -/* - * Enable support for CMYK output. - */ -#undef SPLASH_CMYK - -#endif diff --git a/thirdparty/xpdf/3.02/src/aconf.h.in b/thirdparty/xpdf/3.02/src/aconf.h.in deleted file mode 100644 index 42c04d8a..00000000 --- a/thirdparty/xpdf/3.02/src/aconf.h.in +++ /dev/null @@ -1,116 +0,0 @@ -/* - * aconf.h - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF_H -#define ACONF_H - -#include - -/* - * Use A4 paper size instead of Letter for PostScript output. - */ -#undef A4_PAPER - -/* - * Do not allow text selection. - */ -#undef NO_TEXT_SELECT - -/* - * Include support for OPI comments. - */ -#undef OPI_SUPPORT - -/* - * Enable multithreading support. - */ -#undef MULTITHREADED - -/* - * Enable C++ exceptions. - */ -#undef USE_EXCEPTIONS - -/* - * Enable word list support. - */ -#undef TEXTOUT_WORD_LIST - -/* - * Use fixed point (instead of floating point) arithmetic. - */ -#undef USE_FIXEDPOINT - -/* - * Directory with the Xpdf app-defaults file. - */ -#undef APPDEFDIR - -/* - * Full path for the system-wide xpdfrc file. - */ -#undef SYSTEM_XPDFRC - -/* - * Various include files and functions. - */ -#undef HAVE_DIRENT_H -#undef HAVE_SYS_NDIR_H -#undef HAVE_SYS_DIR_H -#undef HAVE_NDIR_H -#undef HAVE_SYS_SELECT_H -#undef HAVE_SYS_BSDTYPES_H -#undef HAVE_STRINGS_H -#undef HAVE_BSTRING_H -#undef HAVE_POPEN -#undef HAVE_MKSTEMP -#undef HAVE_MKSTEMPS -#undef SELECT_TAKES_INT -#undef HAVE_STD_SORT -#undef HAVE_FSEEKO -#undef HAVE_FSEEK64 -#undef _FILE_OFFSET_BITS -#undef _LARGE_FILES -#undef _LARGEFILE_SOURCE -#undef HAVE_XTAPPSETEXITFLAG - -/* - * This is defined if using libXpm. - */ -#undef HAVE_X11_XPM_H - -/* - * This is defined if using t1lib. - */ -#undef HAVE_T1LIB_H - -/* - * One of these is defined if using FreeType 2. - */ -#undef HAVE_FREETYPE_H -#undef HAVE_FREETYPE_FREETYPE_H - -/* - * This is defined if using libpaper. - */ -#undef HAVE_PAPER_H - -/* - * Enable support for loading plugins. - */ -#undef ENABLE_PLUGINS - -/* - * Defined if the Splash library is avaiable. - */ -#undef HAVE_SPLASH - -/* - * Enable support for CMYK output. - */ -#undef SPLASH_CMYK - -#endif diff --git a/thirdparty/xpdf/3.02/src/aconf2.h b/thirdparty/xpdf/3.02/src/aconf2.h deleted file mode 100644 index b51de1e9..00000000 --- a/thirdparty/xpdf/3.02/src/aconf2.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * aconf2.h - * - * This gets included by aconf.h, and contains miscellaneous global - * settings not directly controlled by autoconf. This is a separate - * file because otherwise the configure script will munge any - * #define/#undef constructs. - * - * Copyright 2002-2003 Glyph & Cog, LLC - */ - -#ifndef ACONF2_H -#define ACONF2_H - -/* - * This controls the use of the interface/implementation pragmas. - */ -#ifdef __GNUC__ -#define USE_GCC_PRAGMAS -#endif -/* There is a bug in the version of gcc which ships with MacOS X 10.2 */ -#if defined(__APPLE__) && defined(__MACH__) -# include -#endif -#ifdef MAC_OS_X_VERSION_MAX_ALLOWED -# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_2 -# undef USE_GCC_PRAGMAS -# endif -#endif - -/* - * Make sure WIN32 is defined if appropriate. - */ -#if defined(_WIN32) && !defined(WIN32) -# define WIN32 -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/src/configure b/thirdparty/xpdf/3.02/src/configure deleted file mode 100644 index 05314de6..00000000 --- a/thirdparty/xpdf/3.02/src/configure +++ /dev/null @@ -1,12810 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.63. -# -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008 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 - - - - -# PATH needs CR -# 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_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 -if (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 - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -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. -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); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# Required to use basename. -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 - - -# Name of the executable. -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'` - -# CDPATH. -$as_unset CDPATH - - -if test "x$CONFIG_SHELL" = x; then - if (eval ":") 2>/dev/null; then - as_have_required=yes -else - as_have_required=no -fi - - if test $as_have_required = yes && (eval ": -(as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=\$LINENO - as_lineno_2=\$LINENO - test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && - test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } -") 2> /dev/null; then - : -else - as_candidate_shells= - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - case $as_dir in - /*) - for as_base in sh bash ksh sh5; do - as_candidate_shells="$as_candidate_shells $as_dir/$as_base" - done;; - esac -done -IFS=$as_save_IFS - - - for as_shell in $as_candidate_shells $SHELL; do - # Try only shells that exist, to save several forks. - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { ("$as_shell") 2> /dev/null <<\_ASEOF -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 - - -: -_ASEOF -}; then - CONFIG_SHELL=$as_shell - as_have_required=yes - if { "$as_shell" 2> /dev/null <<\_ASEOF -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_func_return () { - (exit $1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = "$1" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test $exitcode = 0) || { (exit 1); exit 1; } - -( - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } - -_ASEOF -}; then - break -fi - -fi - - done - - if test "x$CONFIG_SHELL" != x; then - for as_var in BASH_ENV ENV - do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var - done - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} -fi - - - if test $as_have_required = no; then - echo This script requires a shell more modern than all the - echo shells that I found on your system. Please install a - echo modern shell, or manually run the script under such a - echo shell if you do have one. - { (exit 1); exit 1; } -fi - - -fi - -fi - - - -(eval "as_func_return () { - (exit \$1) -} -as_func_success () { - as_func_return 0 -} -as_func_failure () { - as_func_return 1 -} -as_func_ret_success () { - return 0 -} -as_func_ret_failure () { - return 1 -} - -exitcode=0 -if as_func_success; then - : -else - exitcode=1 - echo as_func_success failed. -fi - -if as_func_failure; then - exitcode=1 - echo as_func_failure succeeded. -fi - -if as_func_ret_success; then - : -else - exitcode=1 - echo as_func_ret_success failed. -fi - -if as_func_ret_failure; then - exitcode=1 - echo as_func_ret_failure succeeded. -fi - -if ( set x; as_func_ret_success y && test x = \"\$1\" ); then - : -else - exitcode=1 - echo positional parameters were not saved. -fi - -test \$exitcode = 0") || { - echo No shell found that supports shell functions. - echo Please tell bug-autoconf@gnu.org about your system, - echo including any error possibly output before this message. - echo This can help us improve future autoconf versions. - echo Configuration will now proceed without shell functions. -} - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. 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 - { (exit 1); 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 -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -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=: -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 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, 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= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= - -ac_unique_file="xpdf/xpdf.cc" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif -#ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include -# endif -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_subst_vars='LTLIBOBJS -LIBOBJS -XPDF_TARGET -X -libpaper_CFLAGS -libpaper_LIBS -freetype2_CFLAGS -freetype2_LIBS -t1_CFLAGS -t1_LIBS -Sgm_CFLAGS -Sgm_LIBS -Xm_CFLAGS -Xm_LIBS -Xt_CFLAGS -Xt_LIBS -Xp_CFLAGS -Xp_LIBS -Xext_CFLAGS -Xext_LIBS -Xpm_CFLAGS -Xpm_LIBS -EGREP -GREP -X_EXTRA_LIBS -X_LIBS -X_PRE_LIBS -X_CFLAGS -CPP -XMKMF -UP_DIR -AR -LIBPREFIX -EXE -RANLIB -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -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_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_a4_paper -enable_no_text_select -enable_opi -enable_multithreaded -enable_exceptions -enable_wordlist -enable_fixedpoint -enable_cmyk -with_appdef_dir -with_x -enable_largefile -with_Xpm_library -with_Xpm_includes -with_Xext_library -with_Xext_includes -with_Xp_library -with_Xp_includes -with_Xt_library -with_Xt_includes -with_Xm_library -with_Xm_includes -with_Sgm_library -with_Sgm_includes -with_t1_library -with_t1_includes -with_freetype2_library -with_freetype2_includes -with_libpaper_library -with_libpaper_includes -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -XMKMF -CPP' - - -# 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}' -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=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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } - 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_echo "$as_me: error: invalid feature name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } - 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_echo "$as_me: error: invalid package name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } - 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_echo "$as_me: error: invalid package name: $ac_useropt" >&2 - { (exit 1); exit 1; }; } - 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_echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { $as_echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - 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_echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) { $as_echo "$as_me: error: unrecognized options: $ac_unrecognized_opts" >&2 - { (exit 1); exit 1; }; } ;; - *) $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_echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; } -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_echo "$as_me: error: working directory cannot be determined" >&2 - { (exit 1); exit 1; }; } -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - { $as_echo "$as_me: error: pwd does not report name of working directory" >&2 - { (exit 1); exit 1; }; } - - -# 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_echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || { $as_echo "$as_me: error: $ac_msg" >&2 - { (exit 1); exit 1; }; } - 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 this package 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/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -X features: - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -_ACEOF -fi - -if test -n "$ac_init_help"; then - - 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-a4-paper use A4 paper size instead of Letter for - PostScript output - --enable-no-text-select do not allow text selection - --enable-opi include support for OPI comments - --enable-multithreaded include support for multithreading - --enable-exceptions use C++ exceptions - --enable-wordlist include support for building word lists - --enable-fixedpoint use fixed point (instead of floating point) arithmetic - --enable-cmyk include support for CMYK rasterization - --disable-largefile omit support for large files - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-appdef-dir set app-defaults directory - --with-x use the X Window System - --with-Xpm-library=PATH - use Xpm library (pixmap library - used only for icon) - --with-Xpm-includes=DIR - set directory for Xpm headers - --with-Xext-library=PATH - use Xext library (Motif library) - --with-Xext-includes=DIR - set directory for Xext headers - --with-Xp-library=PATH - use Xp library (Motif library) - --with-Xp-includes=DIR - set directory for Xp headers - --with-Xt-library=PATH - use Xt library (Motif library) - --with-Xt-includes=DIR - set directory for Xt headers - --with-Xm-library=PATH - use Xm library (Motif library) - --with-Xm-includes=DIR - set directory for Xm headers - --with-Sgm-library=PATH - use Sgm library (SGI Motif library) - --with-Sgm-includes=DIR - set directory for Sgm headers - --with-t1-library=PATH - use t1 library (Type 1 font rasterizer) - --with-t1-includes=DIR - set directory for t1 headers - --with-freetype2-library=PATH - use freetype2 library (FreeType2 font rasterizer - version 2.0.5+) - --with-freetype2-includes=DIR - set directory for freetype2 headers - --with-libpaper-library=PATH - use libpaper library (Debian libpaper) - --with-libpaper-includes=DIR - set directory for libpaper headers - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - XMKMF Path to xmkmf, Makefile generator for X Window System - CPP C preprocessor - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -_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 -configure -generated by GNU Autoconf 2.63 - -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 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 -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 $as_me, which was -generated by GNU Autoconf 2.63. 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) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; - 2) - ac_configure_args1="$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 - ac_configure_args="$ac_configure_args '$ac_arg'" - ;; - esac - done -done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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 - - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - 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:$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= ;; #( - *) $as_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 - - cat <<\_ASBOX -## ----------------- ## -## Output variables. ## -## ----------------- ## -_ASBOX - 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 - cat <<\_ASBOX -## ------------------- ## -## File substitutions. ## -## ------------------- ## -_ASBOX - 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 - cat <<\_ASBOX -## ----------- ## -## confdefs.h. ## -## ----------- ## -_ASBOX - 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'; { (exit 1); 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 - -# 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 - - -# 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 - ac_site_file1=$CONFIG_SITE -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 -r "$ac_site_file"; then - { $as_echo "$as_me:$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" - 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. - if test -f "$cache_file"; then - { $as_echo "$as_me:$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:$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:$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:$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:$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:$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:$LINENO: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:$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. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:$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_echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -$as_echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } -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 - - -ac_config_headers="$ac_config_headers aconf.h" - - -# Check whether --enable-a4-paper was given. -if test "${enable_a4_paper+set}" = set; then - enableval=$enable_a4_paper; cat >>confdefs.h <<\_ACEOF -#define A4_PAPER 1 -_ACEOF - -fi - -# Check whether --enable-no-text-select was given. -if test "${enable_no_text_select+set}" = set; then - enableval=$enable_no_text_select; cat >>confdefs.h <<\_ACEOF -#define NO_TEXT_SELECT 1 -_ACEOF - -fi - -# Check whether --enable-opi was given. -if test "${enable_opi+set}" = set; then - enableval=$enable_opi; cat >>confdefs.h <<\_ACEOF -#define OPI_SUPPORT 1 -_ACEOF - -fi - -# Check whether --enable-multithreaded was given. -if test "${enable_multithreaded+set}" = set; then - enableval=$enable_multithreaded; cat >>confdefs.h <<\_ACEOF -#define MULTITHREADED 1 -_ACEOF - -fi - -# Check whether --enable-exceptions was given. -if test "${enable_exceptions+set}" = set; then - enableval=$enable_exceptions; cat >>confdefs.h <<\_ACEOF -#define USE_EXCEPTIONS 1 -_ACEOF - -fi - -# Check whether --enable-wordlist was given. -if test "${enable_wordlist+set}" = set; then - enableval=$enable_wordlist; cat >>confdefs.h <<\_ACEOF -#define TEXTOUT_WORD_LIST 1 -_ACEOF - -fi - -# Check whether --enable-fixedpoint was given. -if test "${enable_fixedpoint+set}" = set; then - enableval=$enable_fixedpoint; cat >>confdefs.h <<\_ACEOF -#define USE_FIXEDPOINT 1 -_ACEOF - -fi - -# Check whether --enable-cmyk was given. -if test "${enable_cmyk+set}" = set; then - enableval=$enable_cmyk; cat >>confdefs.h <<\_ACEOF -#define SPLASH_CMYK 1 -_ACEOF - -fi - - -# Check whether --with-appdef-dir was given. -if test "${with_appdef_dir+set}" = set; then - withval=$with_appdef_dir; cat >>confdefs.h <<_ACEOF -#define APPDEFDIR "$with_appdef_dir" -_ACEOF - -fi - - -if test "$sysconfdir" = '${prefix}/etc'; then - if test "x$prefix" = xNONE; then - system_xpdfrc="$ac_default_prefix/etc/xpdfrc" - else - system_xpdfrc="$prefix/etc/xpdfrc" - fi -else - system_xpdfrc="$sysconfdir/xpdfrc" -fi -cat >>confdefs.h <<_ACEOF -#define SYSTEM_XPDFRC "$system_xpdfrc" -_ACEOF - - -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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; 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:$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:$LINENO: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; 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:$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:$LINENO: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:$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:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; 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:$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:$LINENO: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; 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:$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:$LINENO: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; 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:$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:$LINENO: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; 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:$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:$LINENO: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:$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:$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:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } - -# Provide some information about the compiler. -$as_echo "$as_me:$LINENO: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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:$LINENO: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; 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 - -{ $as_echo "$as_me:$LINENO: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -if test -z "$ac_file"; then - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; }; } -fi - -ac_exeext=$ac_cv_exeext - -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } - fi - fi -fi -{ $as_echo "$as_me:$LINENO: result: yes" >&5 -$as_echo "yes" >&6; } - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -{ $as_echo "$as_me:$LINENO: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -{ $as_echo "$as_me:$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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; 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:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } -fi - -rm -f conftest$ac_cv_exeext -{ $as_echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -{ $as_echo "$as_me:$LINENO: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; 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:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } -fi - -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:$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 test "${ac_cv_c_compiler_gnu+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - 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:$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:$LINENO: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_g=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$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:$LINENO: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* 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" - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$LINENO: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:$LINENO: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -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 - - -{ $as_echo "$as_me:$LINENO: checking for library containing strerror" >&5 -$as_echo_n "checking for library containing strerror... " >&6; } -if test "${ac_cv_search_strerror+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_search_strerror=$ac_res -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_strerror+set}" = set; then - break -fi -done -if test "${ac_cv_search_strerror+set}" = set; then - : -else - ac_cv_search_strerror=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:$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:$LINENO: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if test "${ac_cv_prog_cc_c99+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -#include - -// 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" - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c99=$ac_arg -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$LINENO: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:$LINENO: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:$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:$LINENO: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -/* 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" - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cc_c89=$ac_arg -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$LINENO: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:$LINENO: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:$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:$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 test "${ac_cv_prog_cc_stdc+set}" = set; then - $as_echo_n "(cached) " >&6 -fi - - case $ac_cv_prog_cc_stdc in - no) { $as_echo "$as_me:$LINENO: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - '') { $as_echo "$as_me:$LINENO: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - *) { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CXX+set}" = set; 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:$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:$LINENO: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; 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:$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:$LINENO: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:$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:$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:$LINENO: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -{ (ac_try="$ac_compiler --version >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler --version >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -v >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -v >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (ac_try="$ac_compiler -V >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compiler -V >&5") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -{ $as_echo "$as_me:$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 test "${ac_cv_cxx_compiler_gnu+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_compiler_gnu=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - 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:$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:$LINENO: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if test "${ac_cv_prog_cxx_g+set}" = set; 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - CXXFLAGS="" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_prog_cxx_g=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$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 - -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_echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 -$as_echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} - { (exit 1); exit 1; }; } -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:$LINENO: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; 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:$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' - -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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; 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:$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:$LINENO: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:$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:$LINENO: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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:$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:$LINENO: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:$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:$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 - - -EXE="" -LIBPREFIX="lib" -AR="ar rc" -UP_DIR="" - -{ $as_echo "$as_me:$LINENO: checking for OS/2 (with EMX)" >&5 -$as_echo_n "checking for OS/2 (with EMX)... " >&6; } -if test "${xpdf_cv_sys_os2+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -__EMX__ - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_cv_sys_os2=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_cv_sys_os2=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_sys_os2" >&5 -$as_echo "$xpdf_cv_sys_os2" >&6; } -if test "$xpdf_cv_sys_os2" = yes; then - EXE=".exe" - LIBPREFIX="" - AR="ar -rc" -fi - -{ $as_echo "$as_me:$LINENO: checking for DOS (with DJGPP)" >&5 -$as_echo_n "checking for DOS (with DJGPP)... " >&6; } -if test "${xpdf_cv_sys_dos+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -__DJGPP__ - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_cv_sys_dos=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_cv_sys_dos=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_sys_dos" >&5 -$as_echo "$xpdf_cv_sys_dos" >&6; } -if test "$xpdf_cv_sys_dos" = yes; then - EXE=".exe" - LIBPREFIX="lib" - AR="ar -rc" - UP_DIR="../" -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:$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 test "${ac_cv_prog_CPP+set}" = set; 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 to if __STDC__ is defined, since - # 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f 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:$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 to if __STDC__ is defined, since - # 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi - -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # Broken: success on invalid input. -continue -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi - -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { $as_echo "$as_me:$LINENO: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ { $as_echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -$as_echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; }; } -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:$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_echo "$as_me:$LINENO: error: cannot use X directory names containing '" >&5 -$as_echo "$as_me: error: cannot use X directory names containing '" >&2;} - { (exit 1); exit 1; }; };; #( - *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; 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/X11R6/include -/usr/X11R5/include -/usr/X11R4/include - -/usr/include/X11 -/usr/include/X11R6 -/usr/include/X11R5 -/usr/include/X11R4 - -/usr/local/X11/include -/usr/local/X11R6/include -/usr/local/X11R5/include -/usr/local/X11R4/include - -/usr/local/include/X11 -/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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - # We can compile using X headers with no special include directory. -ac_x_includes= -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - 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.$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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -XrmInitialize () - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - LIBS=$ac_save_LIBS -# We can link X programs with no special library path. -ac_x_libraries= -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - 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 -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - 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:$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:$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. - -cat >>confdefs.h <<\_ACEOF -#define X_DISPLAY_MISSING 1 -_ACEOF - - 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:$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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - { $as_echo "$as_me:$LINENO: result: no" >&5 -$as_echo "no" >&6; } - X_LIBS="$X_LIBS -R$x_libraries" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - LIBS="$ac_xsave_LIBS -R $x_libraries" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - { $as_echo "$as_me:$LINENO: result: yes" >&5 -$as_echo "yes" >&6; } - X_LIBS="$X_LIBS -R $x_libraries" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - { $as_echo "$as_me:$LINENO: result: neither works" >&5 -$as_echo "neither works" >&6; } -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - : -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - { $as_echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } -if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_dnet_dnet_ntoa=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dnet_dnet_ntoa=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$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" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" -fi - - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - { $as_echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5 -$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } -if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldnet_stub $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_dnet_stub_dnet_ntoa=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_dnet_stub_dnet_ntoa=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$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" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" -fi - - fi -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - 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. - { $as_echo "$as_me:$LINENO: checking for gethostbyname" >&5 -$as_echo_n "checking for gethostbyname... " >&6; } -if test "${ac_cv_func_gethostbyname+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gethostbyname to an innocuous variant, in case declares gethostbyname. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostbyname innocuous_gethostbyname - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostbyname (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostbyname - -/* 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 (); -/* 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_gethostbyname || defined __stub___gethostbyname -choke me -#endif - -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_func_gethostbyname=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_gethostbyname=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 -$as_echo "$ac_cv_func_gethostbyname" >&6; } - - if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5 -$as_echo_n "checking for gethostbyname in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_nsl_gethostbyname=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_nsl_gethostbyname=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5 -$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" -fi - - if test $ac_cv_lib_nsl_gethostbyname = no; then - { $as_echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_bsd_gethostbyname=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_bsd_gethostbyname=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; 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. - { $as_echo "$as_me:$LINENO: checking for connect" >&5 -$as_echo_n "checking for connect... " >&6; } -if test "${ac_cv_func_connect+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define connect to an innocuous variant, in case declares connect. - For example, HP-UX 11i declares gettimeofday. */ -#define connect innocuous_connect - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char connect (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef connect - -/* 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 (); -/* 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_connect || defined __stub___connect -choke me -#endif - -int -main () -{ -return connect (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_func_connect=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_connect=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5 -$as_echo "$ac_cv_func_connect" >&6; } - - if test $ac_cv_func_connect = no; then - { $as_echo "$as_me:$LINENO: checking for connect in -lsocket" >&5 -$as_echo_n "checking for connect in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_connect+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_socket_connect=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_socket_connect=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5 -$as_echo "$ac_cv_lib_socket_connect" >&6; } -if test "x$ac_cv_lib_socket_connect" = x""yes; then - X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" -fi - - fi - - # Guillermo Gomez says -lposix is necessary on A/UX. - { $as_echo "$as_me:$LINENO: checking for remove" >&5 -$as_echo_n "checking for remove... " >&6; } -if test "${ac_cv_func_remove+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define remove to an innocuous variant, in case declares remove. - For example, HP-UX 11i declares gettimeofday. */ -#define remove innocuous_remove - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char remove (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef remove - -/* 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 (); -/* 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_remove || defined __stub___remove -choke me -#endif - -int -main () -{ -return remove (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_func_remove=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_remove=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5 -$as_echo "$ac_cv_func_remove" >&6; } - - if test $ac_cv_func_remove = no; then - { $as_echo "$as_me:$LINENO: checking for remove in -lposix" >&5 -$as_echo_n "checking for remove in -lposix... " >&6; } -if test "${ac_cv_lib_posix_remove+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lposix $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_posix_remove=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_posix_remove=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5 -$as_echo "$ac_cv_lib_posix_remove" >&6; } -if test "x$ac_cv_lib_posix_remove" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" -fi - - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - { $as_echo "$as_me:$LINENO: checking for shmat" >&5 -$as_echo_n "checking for shmat... " >&6; } -if test "${ac_cv_func_shmat+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shmat to an innocuous variant, in case declares shmat. - For example, HP-UX 11i declares gettimeofday. */ -#define shmat innocuous_shmat - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shmat (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shmat - -/* 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 (); -/* 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_shmat || defined __stub___shmat -choke me -#endif - -int -main () -{ -return shmat (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_func_shmat=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_shmat=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5 -$as_echo "$ac_cv_func_shmat" >&6; } - - if test $ac_cv_func_shmat = no; then - { $as_echo "$as_me:$LINENO: checking for shmat in -lipc" >&5 -$as_echo_n "checking for shmat in -lipc... " >&6; } -if test "${ac_cv_lib_ipc_shmat+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lipc $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_ipc_shmat=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_ipc_shmat=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5 -$as_echo "$ac_cv_lib_ipc_shmat" >&6; } -if test "x$ac_cv_lib_ipc_shmat" = x""yes; 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:$LINENO: checking for IceConnectionNumber in -lICE" >&5 -$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } -if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lICE $X_EXTRA_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_ICE_IceConnectionNumber=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_ICE_IceConnectionNumber=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 -$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } -if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; 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:$LINENO: checking for $ac_hdr that defines DIR" >&5 -$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include <$ac_hdr> - -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = 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:$LINENO: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_search_opendir=$ac_res -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then - : -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:$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:$LINENO: checking for library containing opendir" >&5 -$as_echo_n "checking for library containing opendir... " >&6; } -if test "${ac_cv_search_opendir+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_search_opendir=$ac_res -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext - if test "${ac_cv_search_opendir+set}" = set; then - break -fi -done -if test "${ac_cv_search_opendir+set}" = set; then - : -else - ac_cv_search_opendir=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:$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 - - -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:$LINENO: checking for gethostbyname" >&5 -$as_echo_n "checking for gethostbyname... " >&6; } -if test "${ac_cv_func_gethostbyname+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gethostbyname to an innocuous variant, in case declares gethostbyname. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostbyname innocuous_gethostbyname - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostbyname (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostbyname - -/* 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 (); -/* 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_gethostbyname || defined __stub___gethostbyname -choke me -#endif - -int -main () -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_func_gethostbyname=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_func_gethostbyname=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5 -$as_echo "$ac_cv_func_gethostbyname" >&6; } - -if test $ac_cv_func_gethostbyname = no; then - { $as_echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5 -$as_echo_n "checking for gethostbyname in -lbsd... " >&6; } -if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbsd $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_bsd_gethostbyname=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_bsd_gethostbyname=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5 -$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } -if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" -fi - -fi - -{ $as_echo "$as_me:$LINENO: checking select() and fd_set in sys/select.h and sys/bsdtypes.h" >&5 -$as_echo_n "checking select() and fd_set in sys/select.h and sys/bsdtypes.h... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -int -main () -{ -fd_set fds; -select(0, NULL, NULL, NULL, NULL); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_ok=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_ok=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $xpdf_ok = yes; then - { $as_echo "$as_me:$LINENO: result: not needed" >&5 -$as_echo "not needed" >&6; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -#include -int -main () -{ -fd_set fds; -select(0, NULL, NULL, NULL, NULL); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_ok=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_ok=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $xpdf_ok = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_SELECT_H 1 -_ACEOF - - { $as_echo "$as_me:$LINENO: result: need sys/select.h" >&5 -$as_echo "need sys/select.h" >&6; } - else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include -#include -int -main () -{ -fd_set fds; -select(0, NULL, NULL, NULL, NULL); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_ok=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_ok=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $xpdf_ok = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_BSDTYPES_H 1 -_ACEOF - - { $as_echo "$as_me:$LINENO: result: need sys/bsdtypes.h" >&5 -$as_echo "need sys/bsdtypes.h" >&6; } - else - { $as_echo "$as_me:$LINENO: result: problem" >&5 -$as_echo "problem" >&6; } - fi - fi -fi - -{ $as_echo "$as_me:$LINENO: checking FD_ZERO and strings.h or bstring.h" >&5 -$as_echo_n "checking FD_ZERO and strings.h or bstring.h... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif -int -main () -{ -fd_set fds; FD_ZERO(&fds); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_ok=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_ok=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -if test $xpdf_ok = yes; then - { $as_echo "$as_me:$LINENO: result: not needed" >&5 -$as_echo "not needed" >&6; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif -int -main () -{ -fd_set fds; FD_ZERO(&fds); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_ok=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_ok=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $xpdf_ok = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_STRINGS_H 1 -_ACEOF - - { $as_echo "$as_me:$LINENO: result: need strings.h" >&5 -$as_echo "need strings.h" >&6; } - else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif -int -main () -{ -fd_set fds; FD_ZERO(&fds); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_ok=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_ok=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - if test $xpdf_ok = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_BSTRING_H 1 -_ACEOF - - { $as_echo "$as_me:$LINENO: result: need bstring.h" >&5 -$as_echo "need bstring.h" >&6; } - else - { $as_echo "$as_me:$LINENO: result: problem" >&5 -$as_echo "problem" >&6; } - fi - fi -fi - - -for ac_func in rewinddir -do -as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 -$as_echo_n "checking for $ac_func... " >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* 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 $ac_func (); -/* 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_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - eval "$as_ac_var=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -if test $ac_cv_func_rewinddir = no; then - -{ $as_echo "$as_me:$LINENO: checking for rewinddir in -lcposix" >&5 -$as_echo_n "checking for rewinddir in -lcposix... " >&6; } -if test "${ac_cv_lib_cposix_rewinddir+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcposix $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 rewinddir (); -int -main () -{ -return rewinddir (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_cposix_rewinddir=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_cposix_rewinddir=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_rewinddir" >&5 -$as_echo "$ac_cv_lib_cposix_rewinddir" >&6; } -if test "x$ac_cv_lib_cposix_rewinddir" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBCPOSIX 1 -_ACEOF - - LIBS="-lcposix $LIBS" - -fi - -fi - - -for ac_func in popen -do -as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 -$as_echo_n "checking for $ac_func... " >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* 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 $ac_func (); -/* 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_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - eval "$as_ac_var=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done - -{ $as_echo "$as_me:$LINENO: checking for mkstemp" >&5 -$as_echo_n "checking for mkstemp... " >&6; } -if test "${xpdf_cv_func_mkstemp+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -int -main () -{ -mkstemp("foo"); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - xpdf_cv_func_mkstemp=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_cv_func_mkstemp=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_func_mkstemp" >&5 -$as_echo "$xpdf_cv_func_mkstemp" >&6; } -if test "$xpdf_cv_func_mkstemp" = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_MKSTEMP 1 -_ACEOF - -fi -{ $as_echo "$as_me:$LINENO: checking for mkstemps" >&5 -$as_echo_n "checking for mkstemps... " >&6; } -if test "${xpdf_cv_func_mkstemps+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -int -main () -{ -mkstemps("foo", 0); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - xpdf_cv_func_mkstemps=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_cv_func_mkstemps=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_func_mkstemps" >&5 -$as_echo "$xpdf_cv_func_mkstemps" >&6; } -if test "$xpdf_cv_func_mkstemps" = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_MKSTEMPS 1 -_ACEOF - -fi - -{ $as_echo "$as_me:$LINENO: checking whether select takes fd_set arguments" >&5 -$as_echo_n "checking whether select takes fd_set arguments... " >&6; } -if test "${xpdf_cv_func_select_arg+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif -int -main () -{ -fd_set fds; -select(1, &fds, &fds, &fds, 0); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_cv_func_select_arg=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_cv_func_select_arg=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_func_select_arg" >&5 -$as_echo "$xpdf_cv_func_select_arg" >&6; } -if test "$xpdf_cv_func_select_arg" != yes; then - cat >>confdefs.h <<\_ACEOF -#define SELECT_TAKES_INT 1 -_ACEOF - -fi - -{ $as_echo "$as_me:$LINENO: checking for std::sort" >&5 -$as_echo_n "checking for std::sort... " >&6; } -if test "${xpdf_cv_func_std_sort+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -struct functor { - bool operator()(const int &i0, const int &i1) { return i0 < i1; } -}; -int -main () -{ -int a[100]; -std::sort(a, a+100, functor()); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - xpdf_cv_func_std_sort=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - xpdf_cv_func_std_sort=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:$LINENO: result: $xpdf_cv_func_std_sort" >&5 -$as_echo "$xpdf_cv_func_std_sort" >&6; } -if test "$xpdf_cv_func_std_sort" = yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_STD_SORT 1 -_ACEOF - -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-largefile was given. -if test "${enable_largefile+set}" = set; then - enableval=$enable_largefile; -fi - -if test "$enable_largefile" != no; then - - { $as_echo "$as_me:$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 test "${ac_cv_sys_largefile_CC+set}" = set; 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* 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 - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext - CC="$CC -n32" - 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_largefile_CC=' -n32'; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$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:$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 test "${ac_cv_sys_file_offset_bits+set}" = set; then - $as_echo_n "(cached) " >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_file_offset_bits=no; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include - /* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_file_offset_bits=64; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$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:$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 test "${ac_cv_sys_large_files+set}" = set; then - $as_echo_n "(cached) " >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - /* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_large_files=no; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _LARGE_FILES 1 -#include - /* 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 -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_sys_large_files=1; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -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:$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:$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 test "${ac_cv_sys_largefile_source+set}" = set; then - $as_echo_n "(cached) " >&6 -else - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include /* for off_t */ - #include -int -main () -{ -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_sys_largefile_source=no; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#define _LARGEFILE_SOURCE 1 -#include /* for off_t */ - #include -int -main () -{ -int (*fp) (FILE *, off_t, int) = fseeko; - return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_sys_largefile_source=1; break -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext - ac_cv_sys_largefile_source=unknown - break -done -fi -{ $as_echo "$as_me:$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 - -cat >>confdefs.h <<\_ACEOF -#define HAVE_FSEEKO 1 -_ACEOF - -fi - - -for ac_func in fseek64 -do -as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 -$as_echo_n "checking for $ac_func... " >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* 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 $ac_func (); -/* 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_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - eval "$as_ac_var=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - xpdf_cv_func_fseek64=yes -else - xpdf_cv_func_fseek64=no -fi -done - - -for ac_func in ftell64 -do -as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5 -$as_echo_n "checking for $ac_func... " >&6; } -if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* 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 $ac_func (); -/* 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_$ac_func || defined __stub___$ac_func -choke me -#endif - -int -main () -{ -return $ac_func (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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 - eval "$as_ac_var=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_var=no" -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_var'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 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 - cat >>confdefs.h <<\_ACEOF -#define HAVE_FSEEK64 1 -_ACEOF - -fi - -if test -z "$no_x"; then - { $as_echo "$as_me:$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 test "${ac_cv_path_GREP+set}" = set; 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 - ac_count=`expr $ac_count + 1` - 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_echo "$as_me:$LINENO: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -$as_echo "$as_me: error: no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:$LINENO: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; 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 - ac_count=`expr $ac_count + 1` - 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_echo "$as_me:$LINENO: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 -$as_echo "$as_me: error: no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} - { (exit 1); exit 1; }; } - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - -{ $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_cv_header_stdc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - 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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include - -_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 >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#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 -rm -f 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { 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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -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 - -( exit $ac_status ) -ac_cv_header_stdc=no -fi -rm -rf conftest.dSYM -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - - -fi -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF - -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` -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - eval "$as_ac_Header=yes" -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - eval "$as_ac_Header=no" -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - - - - - - - - - - - - - - - - - -# Check whether --with-Xpm-library was given. -if test "${with_Xpm_library+set}" = set; then - withval=$with_Xpm_library; smr_cv_with_Xpm_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use Xpm library" >&5 -$as_echo_n "checking whether to use Xpm library... " >&6; } -if test "${smr_cv_with_Xpm_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xpm_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xpm_library" >&5 -$as_echo "$smr_cv_with_Xpm_library" >&6; } - - - case x"$smr_cv_with_Xpm_library" in - xyes | xmaybe) - Xpm_LIBS="-lXpm" - with_Xpm=$smr_cv_with_Xpm_library - ;; - xno) - Xpm_LIBS= - with_Xpm=no - ;; - *) - if test -f "$smr_cv_with_Xpm_library"; then - Xpm_LIBS=$smr_cv_with_Xpm_library - elif test -d "$smr_cv_with_Xpm_library"; then - Xpm_LIBS="-L$smr_cv_with_Xpm_library -lXpm" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_Xpm=yes - ;; - esac - - - - - - - - if test ! x"$with_Xpm" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-Xpm-includes was given. -if test "${with_Xpm_includes+set}" = set; then - withval=$with_Xpm_includes; smr_cv_with_Xpm_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the Xpm header files" >&5 -$as_echo_n "checking where to find the Xpm header files... " >&6; } -if test "${smr_cv_with_Xpm_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xpm_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xpm_includes" >&5 -$as_echo "$smr_cv_with_Xpm_includes" >&6; } - - if test ! x"$smr_cv_with_Xpm_includes" = x; then - if test -d "$smr_cv_with_Xpm_includes"; then - Xpm_CFLAGS="-I$smr_cv_with_Xpm_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - Xpm_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $Xpm_CFLAGS $X_CFLAGS" - - -for ac_header in X11/xpm.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_Xpm_header=yes -else - smr_have_Xpm_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_Xpm_header != no; then - - { $as_echo "$as_me:$LINENO: checking for XpmCreatePixmapFromData in -lXpm" >&5 -$as_echo_n "checking for XpmCreatePixmapFromData in -lXpm... " >&6; } -if test "${ac_cv_lib_Xpm_XpmCreatePixmapFromData+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXpm $Xpm_CFLAGS $X_CFLAGS $Xpm_LIBS $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 XpmCreatePixmapFromData (); -int -main () -{ -return XpmCreatePixmapFromData (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Xpm_XpmCreatePixmapFromData=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Xpm_XpmCreatePixmapFromData=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&5 -$as_echo "$ac_cv_lib_Xpm_XpmCreatePixmapFromData" >&6; } -if test "x$ac_cv_lib_Xpm_XpmCreatePixmapFromData" = x""yes; then - smr_have_Xpm_library=yes -else - smr_have_Xpm_library=no -fi - - fi - - if test x"$smr_have_Xpm_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using Xpm library" >&5 -$as_echo "using Xpm library" >&6; } - else - Xpm_LIBS= - Xpm_CFLAGS= - - if test x"$with_Xpm" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using Xpm library" >&5 -$as_echo "not using Xpm library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested Xpm library not found!" >&5 -$as_echo "$as_me: WARNING: requested Xpm library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - -fi - -if test -z "$no_x"; then - - - - - - - - - - - - - - - - - - -# Check whether --with-Xext-library was given. -if test "${with_Xext_library+set}" = set; then - withval=$with_Xext_library; smr_cv_with_Xext_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use Xext library" >&5 -$as_echo_n "checking whether to use Xext library... " >&6; } -if test "${smr_cv_with_Xext_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xext_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xext_library" >&5 -$as_echo "$smr_cv_with_Xext_library" >&6; } - - - case x"$smr_cv_with_Xext_library" in - xyes | xmaybe) - Xext_LIBS="-lXext" - with_Xext=$smr_cv_with_Xext_library - ;; - xno) - Xext_LIBS= - with_Xext=no - ;; - *) - if test -f "$smr_cv_with_Xext_library"; then - Xext_LIBS=$smr_cv_with_Xext_library - elif test -d "$smr_cv_with_Xext_library"; then - Xext_LIBS="-L$smr_cv_with_Xext_library -lXext" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_Xext=yes - ;; - esac - - - - - - - - if test ! x"$with_Xext" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-Xext-includes was given. -if test "${with_Xext_includes+set}" = set; then - withval=$with_Xext_includes; smr_cv_with_Xext_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the Xext header files" >&5 -$as_echo_n "checking where to find the Xext header files... " >&6; } -if test "${smr_cv_with_Xext_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xext_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xext_includes" >&5 -$as_echo "$smr_cv_with_Xext_includes" >&6; } - - if test ! x"$smr_cv_with_Xext_includes" = x; then - if test -d "$smr_cv_with_Xext_includes"; then - Xext_CFLAGS="-I$smr_cv_with_Xext_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - Xext_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $Xext_CFLAGS $X_CFLAGS" - - -for ac_header in X11/Xlib.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_Xext_header=yes -else - smr_have_Xext_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_Xext_header != no; then - - { $as_echo "$as_me:$LINENO: checking for XextAddDisplay in -lXext" >&5 -$as_echo_n "checking for XextAddDisplay in -lXext... " >&6; } -if test "${ac_cv_lib_Xext_XextAddDisplay+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXext $Xext_CFLAGS $X_CFLAGS $Xext_LIBS $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 XextAddDisplay (); -int -main () -{ -return XextAddDisplay (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Xext_XextAddDisplay=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Xext_XextAddDisplay=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xext_XextAddDisplay" >&5 -$as_echo "$ac_cv_lib_Xext_XextAddDisplay" >&6; } -if test "x$ac_cv_lib_Xext_XextAddDisplay" = x""yes; then - smr_have_Xext_library=yes -else - smr_have_Xext_library=no -fi - - fi - - if test x"$smr_have_Xext_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using Xext library" >&5 -$as_echo "using Xext library" >&6; } - else - Xext_LIBS= - Xext_CFLAGS= - - if test x"$with_Xext" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using Xext library" >&5 -$as_echo "not using Xext library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested Xext library not found!" >&5 -$as_echo "$as_me: WARNING: requested Xext library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --with-Xp-library was given. -if test "${with_Xp_library+set}" = set; then - withval=$with_Xp_library; smr_cv_with_Xp_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use Xp library" >&5 -$as_echo_n "checking whether to use Xp library... " >&6; } -if test "${smr_cv_with_Xp_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xp_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xp_library" >&5 -$as_echo "$smr_cv_with_Xp_library" >&6; } - - - case x"$smr_cv_with_Xp_library" in - xyes | xmaybe) - Xp_LIBS="-lXp" - with_Xp=$smr_cv_with_Xp_library - ;; - xno) - Xp_LIBS= - with_Xp=no - ;; - *) - if test -f "$smr_cv_with_Xp_library"; then - Xp_LIBS=$smr_cv_with_Xp_library - elif test -d "$smr_cv_with_Xp_library"; then - Xp_LIBS="-L$smr_cv_with_Xp_library -lXp" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_Xp=yes - ;; - esac - - - - - - - - if test ! x"$with_Xp" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-Xp-includes was given. -if test "${with_Xp_includes+set}" = set; then - withval=$with_Xp_includes; smr_cv_with_Xp_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the Xp header files" >&5 -$as_echo_n "checking where to find the Xp header files... " >&6; } -if test "${smr_cv_with_Xp_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xp_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xp_includes" >&5 -$as_echo "$smr_cv_with_Xp_includes" >&6; } - - if test ! x"$smr_cv_with_Xp_includes" = x; then - if test -d "$smr_cv_with_Xp_includes"; then - Xp_CFLAGS="-I$smr_cv_with_Xp_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - Xp_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $Xp_CFLAGS $X_CFLAGS" - - -for ac_header in X11/extensions/Print.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_Xp_header=yes -else - smr_have_Xp_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_Xp_header != no; then - - { $as_echo "$as_me:$LINENO: checking for XpStartPage in -lXp" >&5 -$as_echo_n "checking for XpStartPage in -lXp... " >&6; } -if test "${ac_cv_lib_Xp_XpStartPage+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXp $Xp_CFLAGS $X_CFLAGS $Xp_LIBS $X_LIBS $X_PRE_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 XpStartPage (); -int -main () -{ -return XpStartPage (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Xp_XpStartPage=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Xp_XpStartPage=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xp_XpStartPage" >&5 -$as_echo "$ac_cv_lib_Xp_XpStartPage" >&6; } -if test "x$ac_cv_lib_Xp_XpStartPage" = x""yes; then - smr_have_Xp_library=yes -else - smr_have_Xp_library=no -fi - - fi - - if test x"$smr_have_Xp_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using Xp library" >&5 -$as_echo "using Xp library" >&6; } - else - Xp_LIBS= - Xp_CFLAGS= - - if test x"$with_Xp" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using Xp library" >&5 -$as_echo "not using Xp library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested Xp library not found!" >&5 -$as_echo "$as_me: WARNING: requested Xp library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --with-Xt-library was given. -if test "${with_Xt_library+set}" = set; then - withval=$with_Xt_library; smr_cv_with_Xt_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use Xt library" >&5 -$as_echo_n "checking whether to use Xt library... " >&6; } -if test "${smr_cv_with_Xt_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xt_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xt_library" >&5 -$as_echo "$smr_cv_with_Xt_library" >&6; } - - - case x"$smr_cv_with_Xt_library" in - xyes | xmaybe) - Xt_LIBS="-lXt" - with_Xt=$smr_cv_with_Xt_library - ;; - xno) - Xt_LIBS= - with_Xt=no - ;; - *) - if test -f "$smr_cv_with_Xt_library"; then - Xt_LIBS=$smr_cv_with_Xt_library - elif test -d "$smr_cv_with_Xt_library"; then - Xt_LIBS="-L$smr_cv_with_Xt_library -lXt" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_Xt=yes - ;; - esac - - - - - - - - if test ! x"$with_Xt" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-Xt-includes was given. -if test "${with_Xt_includes+set}" = set; then - withval=$with_Xt_includes; smr_cv_with_Xt_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the Xt header files" >&5 -$as_echo_n "checking where to find the Xt header files... " >&6; } -if test "${smr_cv_with_Xt_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xt_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xt_includes" >&5 -$as_echo "$smr_cv_with_Xt_includes" >&6; } - - if test ! x"$smr_cv_with_Xt_includes" = x; then - if test -d "$smr_cv_with_Xt_includes"; then - Xt_CFLAGS="-I$smr_cv_with_Xt_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - Xt_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $Xt_CFLAGS $X_CFLAGS" - - -for ac_header in X11/Intrinsic.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_Xt_header=yes -else - smr_have_Xt_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_Xt_header != no; then - - { $as_echo "$as_me:$LINENO: checking for XtAppInitialize in -lXt" >&5 -$as_echo_n "checking for XtAppInitialize in -lXt... " >&6; } -if test "${ac_cv_lib_Xt_XtAppInitialize+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXt $Xt_CFLAGS $X_CFLAGS $Xt_LIBS $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 XtAppInitialize (); -int -main () -{ -return XtAppInitialize (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Xt_XtAppInitialize=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Xt_XtAppInitialize=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xt_XtAppInitialize" >&5 -$as_echo "$ac_cv_lib_Xt_XtAppInitialize" >&6; } -if test "x$ac_cv_lib_Xt_XtAppInitialize" = x""yes; then - smr_have_Xt_library=yes -else - smr_have_Xt_library=no -fi - - fi - - if test x"$smr_have_Xt_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using Xt library" >&5 -$as_echo "using Xt library" >&6; } - else - Xt_LIBS= - Xt_CFLAGS= - - if test x"$with_Xt" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using Xt library" >&5 -$as_echo "not using Xt library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested Xt library not found!" >&5 -$as_echo "$as_me: WARNING: requested Xt library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --with-Xm-library was given. -if test "${with_Xm_library+set}" = set; then - withval=$with_Xm_library; smr_cv_with_Xm_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use Xm library" >&5 -$as_echo_n "checking whether to use Xm library... " >&6; } -if test "${smr_cv_with_Xm_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xm_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xm_library" >&5 -$as_echo "$smr_cv_with_Xm_library" >&6; } - - - case x"$smr_cv_with_Xm_library" in - xyes | xmaybe) - Xm_LIBS="-lXm" - with_Xm=$smr_cv_with_Xm_library - ;; - xno) - Xm_LIBS= - with_Xm=no - ;; - *) - if test -f "$smr_cv_with_Xm_library"; then - Xm_LIBS=$smr_cv_with_Xm_library - elif test -d "$smr_cv_with_Xm_library"; then - Xm_LIBS="-L$smr_cv_with_Xm_library -lXm" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_Xm=yes - ;; - esac - - - - - - - - if test ! x"$with_Xm" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-Xm-includes was given. -if test "${with_Xm_includes+set}" = set; then - withval=$with_Xm_includes; smr_cv_with_Xm_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the Xm header files" >&5 -$as_echo_n "checking where to find the Xm header files... " >&6; } -if test "${smr_cv_with_Xm_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Xm_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Xm_includes" >&5 -$as_echo "$smr_cv_with_Xm_includes" >&6; } - - if test ! x"$smr_cv_with_Xm_includes" = x; then - if test -d "$smr_cv_with_Xm_includes"; then - Xm_CFLAGS="-I$smr_cv_with_Xm_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - Xm_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $Xm_CFLAGS $X_CFLAGS" - - -for ac_header in Xm/XmAll.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_Xm_header=yes -else - smr_have_Xm_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_Xm_header != no; then - - { $as_echo "$as_me:$LINENO: checking for XmCreateForm in -lXm" >&5 -$as_echo_n "checking for XmCreateForm in -lXm... " >&6; } -if test "${ac_cv_lib_Xm_XmCreateForm+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXm $Xm_CFLAGS $X_CFLAGS $Xm_LIBS $Xt_LIBS $X_LIBS $X_PRE_LIBS $Xp_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 XmCreateForm (); -int -main () -{ -return XmCreateForm (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Xm_XmCreateForm=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Xm_XmCreateForm=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xm_XmCreateForm" >&5 -$as_echo "$ac_cv_lib_Xm_XmCreateForm" >&6; } -if test "x$ac_cv_lib_Xm_XmCreateForm" = x""yes; then - smr_have_Xm_library=yes -else - smr_have_Xm_library=no -fi - - fi - - if test x"$smr_have_Xm_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using Xm library" >&5 -$as_echo "using Xm library" >&6; } - else - Xm_LIBS= - Xm_CFLAGS= - - if test x"$with_Xm" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using Xm library" >&5 -$as_echo "not using Xm library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested Xm library not found!" >&5 -$as_echo "$as_me: WARNING: requested Xm library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --with-Sgm-library was given. -if test "${with_Sgm_library+set}" = set; then - withval=$with_Sgm_library; smr_cv_with_Sgm_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use Sgm library" >&5 -$as_echo_n "checking whether to use Sgm library... " >&6; } -if test "${smr_cv_with_Sgm_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Sgm_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Sgm_library" >&5 -$as_echo "$smr_cv_with_Sgm_library" >&6; } - - - case x"$smr_cv_with_Sgm_library" in - xyes | xmaybe) - Sgm_LIBS="-lSgm" - with_Sgm=$smr_cv_with_Sgm_library - ;; - xno) - Sgm_LIBS= - with_Sgm=no - ;; - *) - if test -f "$smr_cv_with_Sgm_library"; then - Sgm_LIBS=$smr_cv_with_Sgm_library - elif test -d "$smr_cv_with_Sgm_library"; then - Sgm_LIBS="-L$smr_cv_with_Sgm_library -lSgm" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_Sgm=yes - ;; - esac - - - - - - - - if test ! x"$with_Sgm" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-Sgm-includes was given. -if test "${with_Sgm_includes+set}" = set; then - withval=$with_Sgm_includes; smr_cv_with_Sgm_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the Sgm header files" >&5 -$as_echo_n "checking where to find the Sgm header files... " >&6; } -if test "${smr_cv_with_Sgm_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_Sgm_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_Sgm_includes" >&5 -$as_echo "$smr_cv_with_Sgm_includes" >&6; } - - if test ! x"$smr_cv_with_Sgm_includes" = x; then - if test -d "$smr_cv_with_Sgm_includes"; then - Sgm_CFLAGS="-I$smr_cv_with_Sgm_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - Sgm_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $Sgm_CFLAGS $X_CFLAGS" - - -for ac_header in Sgm/HPanedW.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_Sgm_header=yes -else - smr_have_Sgm_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_Sgm_header != no; then - - { $as_echo "$as_me:$LINENO: checking for SgCreateHorzPanedWindow in -lSgm" >&5 -$as_echo_n "checking for SgCreateHorzPanedWindow in -lSgm... " >&6; } -if test "${ac_cv_lib_Sgm_SgCreateHorzPanedWindow+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lSgm $Sgm_CFLAGS $X_CFLAGS $Sgm_LIBS $Xm_LIBS $Xt_LIBS $X_LIBS $X_PRE_LIBS $Xp_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 SgCreateHorzPanedWindow (); -int -main () -{ -return SgCreateHorzPanedWindow (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Sgm_SgCreateHorzPanedWindow=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Sgm_SgCreateHorzPanedWindow=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Sgm_SgCreateHorzPanedWindow" >&5 -$as_echo "$ac_cv_lib_Sgm_SgCreateHorzPanedWindow" >&6; } -if test "x$ac_cv_lib_Sgm_SgCreateHorzPanedWindow" = x""yes; then - smr_have_Sgm_library=yes -else - smr_have_Sgm_library=no -fi - - fi - - if test x"$smr_have_Sgm_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using Sgm library" >&5 -$as_echo "using Sgm library" >&6; } - else - Sgm_LIBS= - Sgm_CFLAGS= - - if test x"$with_Sgm" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using Sgm library" >&5 -$as_echo "not using Sgm library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested Sgm library not found!" >&5 -$as_echo "$as_me: WARNING: requested Sgm library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - - if test "x$smr_have_Xt_library" = xyes; then - { $as_echo "$as_me:$LINENO: checking for XtAppSetExitFlag in -lXt" >&5 -$as_echo_n "checking for XtAppSetExitFlag in -lXt... " >&6; } -if test "${ac_cv_lib_Xt_XtAppSetExitFlag+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lXt $Xt_LIBS $X_LIBS $X_PRE_LIBS $Xp_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 XtAppSetExitFlag (); -int -main () -{ -return XtAppSetExitFlag (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_Xt_XtAppSetExitFlag=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_Xt_XtAppSetExitFlag=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_Xt_XtAppSetExitFlag" >&5 -$as_echo "$ac_cv_lib_Xt_XtAppSetExitFlag" >&6; } -if test "x$ac_cv_lib_Xt_XtAppSetExitFlag" = x""yes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_XTAPPSETEXITFLAG 1 -_ACEOF - -fi - - fi -fi - - - - - - - - - - - - - - - - - - - -# Check whether --with-t1-library was given. -if test "${with_t1_library+set}" = set; then - withval=$with_t1_library; smr_cv_with_t1_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use t1 library" >&5 -$as_echo_n "checking whether to use t1 library... " >&6; } -if test "${smr_cv_with_t1_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_t1_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_t1_library" >&5 -$as_echo "$smr_cv_with_t1_library" >&6; } - - - case x"$smr_cv_with_t1_library" in - xyes | xmaybe) - t1_LIBS="-lt1" - with_t1=$smr_cv_with_t1_library - ;; - xno) - t1_LIBS= - with_t1=no - ;; - *) - if test -f "$smr_cv_with_t1_library"; then - t1_LIBS=$smr_cv_with_t1_library - elif test -d "$smr_cv_with_t1_library"; then - t1_LIBS="-L$smr_cv_with_t1_library -lt1" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_t1=yes - ;; - esac - - - - - - - - if test ! x"$with_t1" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-t1-includes was given. -if test "${with_t1_includes+set}" = set; then - withval=$with_t1_includes; smr_cv_with_t1_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the t1 header files" >&5 -$as_echo_n "checking where to find the t1 header files... " >&6; } -if test "${smr_cv_with_t1_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_t1_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_t1_includes" >&5 -$as_echo "$smr_cv_with_t1_includes" >&6; } - - if test ! x"$smr_cv_with_t1_includes" = x; then - if test -d "$smr_cv_with_t1_includes"; then - t1_CFLAGS="-I$smr_cv_with_t1_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - t1_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $t1_CFLAGS $X_CFLAGS" - - -for ac_header in t1lib.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_t1_header=yes -else - smr_have_t1_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_t1_header != no; then - - { $as_echo "$as_me:$LINENO: checking for T1_InitLib in -lt1" >&5 -$as_echo_n "checking for T1_InitLib in -lt1... " >&6; } -if test "${ac_cv_lib_t1_T1_InitLib+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lt1 $t1_CFLAGS $X_CFLAGS $t1_LIBS -lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 T1_InitLib (); -int -main () -{ -return T1_InitLib (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_t1_T1_InitLib=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_t1_T1_InitLib=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_t1_T1_InitLib" >&5 -$as_echo "$ac_cv_lib_t1_T1_InitLib" >&6; } -if test "x$ac_cv_lib_t1_T1_InitLib" = x""yes; then - smr_have_t1_library=yes -else - smr_have_t1_library=no -fi - - fi - - if test x"$smr_have_t1_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using t1 library" >&5 -$as_echo "using t1 library" >&6; } - else - t1_LIBS= - t1_CFLAGS= - - if test x"$with_t1" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using t1 library" >&5 -$as_echo "not using t1 library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested t1 library not found!" >&5 -$as_echo "$as_me: WARNING: requested t1 library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Check whether --with-freetype2-library was given. -if test "${with_freetype2_library+set}" = set; then - withval=$with_freetype2_library; smr_cv_with_freetype2_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use freetype2 library" >&5 -$as_echo_n "checking whether to use freetype2 library... " >&6; } -if test "${smr_cv_with_freetype2_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_freetype2_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_freetype2_library" >&5 -$as_echo "$smr_cv_with_freetype2_library" >&6; } - - - case x"$smr_cv_with_freetype2_library" in - xyes | xmaybe) - freetype2_LIBS="-lfreetype" - with_freetype2=$smr_cv_with_freetype2_library - ;; - xno) - freetype2_LIBS= - with_freetype2=no - ;; - *) - if test -f "$smr_cv_with_freetype2_library"; then - freetype2_LIBS=$smr_cv_with_freetype2_library - elif test -d "$smr_cv_with_freetype2_library"; then - freetype2_LIBS="-L$smr_cv_with_freetype2_library -lfreetype" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_freetype2=yes - ;; - esac - - - - - - - - if test ! x"$with_freetype2" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-freetype2-includes was given. -if test "${with_freetype2_includes+set}" = set; then - withval=$with_freetype2_includes; smr_cv_with_freetype2_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the freetype2 header files" >&5 -$as_echo_n "checking where to find the freetype2 header files... " >&6; } -if test "${smr_cv_with_freetype2_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_freetype2_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_freetype2_includes" >&5 -$as_echo "$smr_cv_with_freetype2_includes" >&6; } - - if test ! x"$smr_cv_with_freetype2_includes" = x; then - if test -d "$smr_cv_with_freetype2_includes"; then - freetype2_CFLAGS="-I$smr_cv_with_freetype2_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - freetype2_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $freetype2_CFLAGS " - - -for ac_header in ft2build.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_freetype2_header=yes -else - smr_have_freetype2_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_freetype2_header != no; then - - { $as_echo "$as_me:$LINENO: checking for FT_Get_Name_Index in -lfreetype" >&5 -$as_echo_n "checking for FT_Get_Name_Index in -lfreetype... " >&6; } -if test "${ac_cv_lib_freetype_FT_Get_Name_Index+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lfreetype $freetype2_CFLAGS $freetype2_LIBS -lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 FT_Get_Name_Index (); -int -main () -{ -return FT_Get_Name_Index (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_freetype_FT_Get_Name_Index=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_freetype_FT_Get_Name_Index=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_freetype_FT_Get_Name_Index" >&5 -$as_echo "$ac_cv_lib_freetype_FT_Get_Name_Index" >&6; } -if test "x$ac_cv_lib_freetype_FT_Get_Name_Index" = x""yes; then - smr_have_freetype2_library=yes -else - smr_have_freetype2_library=no -fi - - fi - - if test x"$smr_have_freetype2_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using freetype2 library" >&5 -$as_echo "using freetype2 library" >&6; } - else - freetype2_LIBS= - freetype2_CFLAGS= - - if test x"$with_freetype2" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using freetype2 library" >&5 -$as_echo "not using freetype2 library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested freetype2 library not found!" >&5 -$as_echo "$as_me: WARNING: requested freetype2 library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - -if test "x$smr_have_freetype2_library" = xyes; then - cat >>confdefs.h <<\_ACEOF -#define HAVE_FREETYPE_FREETYPE_H 1 -_ACEOF - - cat >>confdefs.h <<\_ACEOF -#define HAVE_SPLASH 1 -_ACEOF - -fi - - - - - - - - - - - - - - - - - - - -# Check whether --with-libpaper-library was given. -if test "${with_libpaper_library+set}" = set; then - withval=$with_libpaper_library; smr_cv_with_libpaper_library=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking whether to use libpaper library" >&5 -$as_echo_n "checking whether to use libpaper library... " >&6; } -if test "${smr_cv_with_libpaper_library+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_libpaper_library=maybe -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_libpaper_library" >&5 -$as_echo "$smr_cv_with_libpaper_library" >&6; } - - - case x"$smr_cv_with_libpaper_library" in - xyes | xmaybe) - libpaper_LIBS="-lpaper" - with_libpaper=$smr_cv_with_libpaper_library - ;; - xno) - libpaper_LIBS= - with_libpaper=no - ;; - *) - if test -f "$smr_cv_with_libpaper_library"; then - libpaper_LIBS=$smr_cv_with_libpaper_library - elif test -d "$smr_cv_with_libpaper_library"; then - libpaper_LIBS="-L$smr_cv_with_libpaper_library -lpaper" - else - { { $as_echo "$as_me:$LINENO: error: argument must be boolean, file, or directory" >&5 -$as_echo "$as_me: error: argument must be boolean, file, or directory" >&2;} - { (exit 1); exit 1; }; } - fi - with_libpaper=yes - ;; - esac - - - - - - - - if test ! x"$with_libpaper" = xno; then - - # If we got this far, then the user didn't explicitly ask not to use - # the library. - - - - - - - - -# Check whether --with-libpaper-includes was given. -if test "${with_libpaper_includes+set}" = set; then - withval=$with_libpaper_includes; smr_cv_with_libpaper_includes=$withval -fi - - - { $as_echo "$as_me:$LINENO: checking where to find the libpaper header files" >&5 -$as_echo_n "checking where to find the libpaper header files... " >&6; } -if test "${smr_cv_with_libpaper_includes+set}" = set; then - $as_echo_n "(cached) " >&6 -else - smr_cv_with_libpaper_includes= -fi -{ $as_echo "$as_me:$LINENO: result: $smr_cv_with_libpaper_includes" >&5 -$as_echo "$smr_cv_with_libpaper_includes" >&6; } - - if test ! x"$smr_cv_with_libpaper_includes" = x; then - if test -d "$smr_cv_with_libpaper_includes"; then - libpaper_CFLAGS="-I$smr_cv_with_libpaper_includes" - else - { { $as_echo "$as_me:$LINENO: error: argument must be a directory" >&5 -$as_echo "$as_me: error: argument must be a directory" >&2;} - { (exit 1); exit 1; }; } - fi - else - libpaper_CFLAGS= - fi - - smr_test_CPPFLAGS="${CPPFLAGS+set}" - smr_save_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $libpaper_CFLAGS " - - -for ac_header in paper.h -do -as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - { $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:$LINENO: checking $ac_header usability" >&5 -$as_echo_n "checking $ac_header usability... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_compile") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then - ac_header_compiler=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_compiler=no -fi - -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:$LINENO: checking $ac_header presence" >&5 -$as_echo_n "checking $ac_header presence... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then - ac_header_preproc=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi - -rm -f conftest.err conftest.$ac_ext -{ $as_echo "$as_me:$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:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -$as_echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { $as_echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -$as_echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - - ;; -esac -{ $as_echo "$as_me:$LINENO: checking for $ac_header" >&5 -$as_echo_n "checking for $ac_header... " >&6; } -if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then - $as_echo_n "(cached) " >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -ac_res=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - { $as_echo "$as_me:$LINENO: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - -fi -as_val=`eval 'as_val=${'$as_ac_Header'} - $as_echo "$as_val"'` - if test "x$as_val" = x""yes; then - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - smr_have_libpaper_header=yes -else - smr_have_libpaper_header=no -fi - -done - - - if test x"$smr_test_CPPFLAGS" = xset; then - CPPFLAGS=$smr_save_CPPFLAGS - else - unset CPPFLAGS - fi - - - - - - - - # We need only look for the library if the header has been found - # (or no header is needed). - if test $smr_have_libpaper_header != no; then - - { $as_echo "$as_me:$LINENO: checking for paperinit in -lpaper" >&5 -$as_echo_n "checking for paperinit in -lpaper... " >&6; } -if test "${ac_cv_lib_paper_paperinit+set}" = set; then - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpaper $libpaper_CFLAGS $libpaper_LIBS $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* 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 paperinit (); -int -main () -{ -return paperinit (); - ; - return 0; -} -_ACEOF -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:$LINENO: $ac_try_echo\"" -$as_echo "$ac_try_echo") >&5 - (eval "$ac_link") 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { - 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_cv_lib_paper_paperinit=yes -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_lib_paper_paperinit=no -fi - -rm -rf conftest.dSYM -rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_paper_paperinit" >&5 -$as_echo "$ac_cv_lib_paper_paperinit" >&6; } -if test "x$ac_cv_lib_paper_paperinit" = x""yes; then - smr_have_libpaper_library=yes -else - smr_have_libpaper_library=no -fi - - fi - - if test x"$smr_have_libpaper_library" = xyes; then - { $as_echo "$as_me:$LINENO: result: using libpaper library" >&5 -$as_echo "using libpaper library" >&6; } - else - libpaper_LIBS= - libpaper_CFLAGS= - - if test x"$with_libpaper" = xmaybe; then - { $as_echo "$as_me:$LINENO: result: not using libpaper library" >&5 -$as_echo "not using libpaper library" >&6; } - else - { $as_echo "$as_me:$LINENO: WARNING: requested libpaper library not found!" >&5 -$as_echo "$as_me: WARNING: requested libpaper library not found!" >&2;} - fi - fi - fi - - - - - - - - - - - - - - -if test -n "$no_x" -o "x$smr_have_Xm_library" != xyes -o "x$smr_have_freetype2_library" != xyes; then - X="#" - XPDF_TARGET="all-no-x" -else - X="" - XPDF_TARGET="all" -fi - - - -ac_config_files="$ac_config_files Makefile goo/Makefile fofi/Makefile splash/Makefile xpdf/Makefile" - -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:$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= ;; #( - *) $as_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 - test "x$cache_file" != "x/dev/null" && - { $as_echo "$as_me:$LINENO: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file - else - { $as_echo "$as_me:$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= -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. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: ${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:$LINENO: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF || ac_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} -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_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 - - - - -# PATH needs CR -# 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_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 -if (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 - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset -else - as_unset=false -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. -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); exit 1; } -fi - -# Work around bugs in pre-3.0 UWIN ksh. -for as_var in ENV MAIL MAILPATH -do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# Required to use basename. -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 - - -# Name of the executable. -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'` - -# CDPATH. -$as_unset CDPATH - - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line after each line using $LINENO; the second 'sed' - # does the real work. The second script uses 'N' to pair each - # line-number line with the line containing $LINENO, and appends - # trailing '-' during substitution so that $LINENO is not a special - # case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # scripts with optimization help from Paolo Bonzini. 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 - { (exit 1); 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 -} - - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in --n*) - case `echo 'x\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - *) ECHO_C='\c';; - esac;; -*) - ECHO_N='-n';; -esac -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -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=: -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 - -# 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 $as_me, which was -generated by GNU Autoconf 2.63. 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" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. - -Usage: $0 [OPTION]... [FILE]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, 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 - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.63, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" - -Copyright (C) 2008 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' -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=$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 ;; - --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"` ;; - esac - CONFIG_FILES="$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 - CONFIG_HEADERS="$CONFIG_HEADERS '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - { $as_echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; };; - --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_echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } ;; - - *) ac_config_targets="$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 -_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 - "aconf.h") CONFIG_HEADERS="$CONFIG_HEADERS aconf.h" ;; - "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" ;; - "xpdf/Makefile") CONFIG_FILES="$CONFIG_FILES xpdf/Makefile" ;; - - *) { { $as_echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -$as_echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; - 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 -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= - trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status -' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || -{ - $as_echo "$as_me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} - -# 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=' ' -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /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 {' >"$tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } -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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - - 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_echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - 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 >>"\$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 -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$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 < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || { { $as_echo "$as_me:$LINENO: error: could not setup config files machinery" >&5 -$as_echo "$as_me: error: could not setup config files machinery" >&2;} - { (exit 1); exit 1; }; } -_ACEOF - -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ 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[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ -s/:*$// -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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then - break - elif $ac_last_try; then - { { $as_echo "$as_me:$LINENO: error: could not make $CONFIG_HEADERS" >&5 -$as_echo "$as_me: error: could not make $CONFIG_HEADERS" >&2;} - { (exit 1); exit 1; }; } - 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 -' >$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_echo "$as_me:$LINENO: error: could not setup config headers machinery" >&5 -$as_echo "$as_me: error: could not setup config headers machinery" >&2;} - { (exit 1); exit 1; }; } -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " -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_echo "$as_me:$LINENO: error: invalid tag $ac_tag" >&5 -$as_echo "$as_me: error: invalid tag $ac_tag" >&2;} - { (exit 1); exit 1; }; };; - :[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="$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_echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 -$as_echo "$as_me: error: cannot find input file: $ac_f" >&2;} - { (exit 1); exit 1; }; };; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - ac_file_inputs="$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:$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 >"$tmp/stdin" \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } ;; - 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" - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { - 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_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 -$as_echo "$as_me: error: cannot create directory $as_dir" >&2;} - { (exit 1); exit 1; }; }; } - 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 -_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:$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 -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:$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 "$tmp/stdin" - case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; - esac \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ - || { { $as_echo "$as_me:$LINENO: error: could not create $ac_file" >&5 -$as_echo "$as_me: error: could not create $ac_file" >&2;} - { (exit 1); exit 1; }; } - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || { { $as_echo "$as_me:$LINENO: error: could not create -" >&5 -$as_echo "$as_me: error: could not create -" >&2;} - { (exit 1); exit 1; }; } - fi - ;; - - - esac - -done # for ac_tag - - -{ (exit 0); exit 0; } -_ACEOF -chmod +x $CONFIG_STATUS -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - { { $as_echo "$as_me:$LINENO: error: write failure creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: error: write failure creating $CONFIG_STATUS" >&2;} - { (exit 1); exit 1; }; } - - -# 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 || { (exit 1); exit 1; } -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:$LINENO: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -if test -n "$no_x" -o "x$smr_have_Xm_library" != xyes -o "x$smr_have_freetype2_library" != xyes; then - if test -n "$no_x"; then - { $as_echo "$as_me:$LINENO: WARNING: Couldn't find X" >&5 -$as_echo "$as_me: WARNING: Couldn't find X" >&2;}; - fi - if test "x$smr_have_Xm_library" != xyes; then - { $as_echo "$as_me:$LINENO: WARNING: Couldn't find Motif" >&5 -$as_echo "$as_me: WARNING: Couldn't find Motif" >&2;}; - fi - if test "x$smr_have_freetype2_library" != xyes; then - { $as_echo "$as_me:$LINENO: WARNING: Couldn't find FreeType" >&5 -$as_echo "$as_me: WARNING: Couldn't find FreeType" >&2;}; - fi - { $as_echo "$as_me:$LINENO: WARNING: -- You will be able to compile pdftops, pdftotext, - pdfinfo, pdffonts, and pdfimages, but not xpdf or pdftoppm" >&5 -$as_echo "$as_me: WARNING: -- You will be able to compile pdftops, pdftotext, - pdfinfo, pdffonts, and pdfimages, but not xpdf or pdftoppm" >&2;} -fi diff --git a/thirdparty/xpdf/3.02/src/configure.in b/thirdparty/xpdf/3.02/src/configure.in deleted file mode 100644 index aec199ca..00000000 --- a/thirdparty/xpdf/3.02/src/configure.in +++ /dev/null @@ -1,368 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -dnl Copyright 1998-2005 Glyph & Cog, LLC - -AC_PREREQ(2.57) - -AC_INIT(xpdf/xpdf.cc) -AC_CONFIG_HEADER(aconf.h) - -dnl ##### Optional features. -AC_ARG_ENABLE(a4-paper, -[ --enable-a4-paper use A4 paper size instead of Letter for - PostScript output], -AC_DEFINE(A4_PAPER)) -AC_ARG_ENABLE(no-text-select, -[ --enable-no-text-select do not allow text selection], -AC_DEFINE(NO_TEXT_SELECT)) -AC_ARG_ENABLE(opi, -[ --enable-opi include support for OPI comments], -AC_DEFINE(OPI_SUPPORT)) -AC_ARG_ENABLE(multithreaded, -[ --enable-multithreaded include support for multithreading], -AC_DEFINE(MULTITHREADED)) -AC_ARG_ENABLE(exceptions, -[ --enable-exceptions use C++ exceptions], -AC_DEFINE(USE_EXCEPTIONS)) -AC_ARG_ENABLE(wordlist, -[ --enable-wordlist include support for building word lists], -AC_DEFINE(TEXTOUT_WORD_LIST)) -AC_ARG_ENABLE(fixedpoint, -[ --enable-fixedpoint use fixed point (instead of floating point) arithmetic], -AC_DEFINE(USE_FIXEDPOINT)) -AC_ARG_ENABLE(cmyk, -[ --enable-cmyk include support for CMYK rasterization], -AC_DEFINE(SPLASH_CMYK)) -AC_ARG_WITH(appdef-dir, -[ --with-appdef-dir set app-defaults directory], -AC_DEFINE_UNQUOTED(APPDEFDIR, "$with_appdef_dir")) - -dnl ##### Path to xpdfrc. -dnl This ugly kludge to get the sysconfdir path is needed because -dnl autoconf doesn't actually set the prefix variable until later. -if test "$sysconfdir" = '${prefix}/etc'; then - if test "x$prefix" = xNONE; then - system_xpdfrc="$ac_default_prefix/etc/xpdfrc" - else - system_xpdfrc="$prefix/etc/xpdfrc" - fi -else - system_xpdfrc="$sysconfdir/xpdfrc" -fi -AC_DEFINE_UNQUOTED(SYSTEM_XPDFRC, "$system_xpdfrc") - -dnl ##### Checks for programs. -AC_PROG_CC -AC_ISC_POSIX -AC_PROG_CC_STDC -#if test -z "$CXX" -a "$CC" = "gcc"; then -# CXX="gcc" -#fi -AC_PROG_CXX -AC_PROG_INSTALL -AC_PROG_RANLIB - -dnl ##### Default values for Unix. -EXE="" -LIBPREFIX="lib" -AR="ar rc" -UP_DIR="" - -dnl ##### Check for OS/2. -AC_CACHE_CHECK([for OS/2 (with EMX)], -xpdf_cv_sys_os2, -[AC_TRY_COMPILE([], -[__EMX__], -xpdf_cv_sys_os2=yes, xpdf_cv_sys_os2=no)]) -if test "$xpdf_cv_sys_os2" = yes; then - EXE=".exe" - LIBPREFIX="" - AR="ar -rc" -fi - -dnl ##### Check for DOS (with DJGPP). -AC_CACHE_CHECK([for DOS (with DJGPP)], -xpdf_cv_sys_dos, -[AC_TRY_COMPILE([], -[__DJGPP__], -xpdf_cv_sys_dos=yes, xpdf_cv_sys_dos=no)]) -if test "$xpdf_cv_sys_dos" = yes; then - EXE=".exe" - LIBPREFIX="lib" - AR="ar -rc" - UP_DIR="../" -fi - -dnl ##### Do substitutions. -AC_SUBST(EXE) -AC_SUBST(LIBPREFIX) -AC_SUBST(AR) -AC_SUBST(UP_DIR) - -dnl ##### Checks for header files. -AC_PATH_XTRA -AC_HEADER_DIRENT - -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 - -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 - -dnl ##### Look for header that defines select() and fd_set. -AC_MSG_CHECKING([select() and fd_set in sys/select.h and sys/bsdtypes.h]) -AC_TRY_COMPILE([#include -#include -#include -#include ], - [fd_set fds; -select(0, NULL, NULL, NULL, NULL);], xpdf_ok=yes, xpdf_ok=no) -if test $xpdf_ok = yes; then - AC_MSG_RESULT([not needed]) -else - AC_TRY_COMPILE([#include -#include -#include -#include -#include ], - [fd_set fds; -select(0, NULL, NULL, NULL, NULL);], xpdf_ok=yes, xpdf_ok=no) - if test $xpdf_ok = yes; then - AC_DEFINE(HAVE_SYS_SELECT_H) - AC_MSG_RESULT([need sys/select.h]) - else - AC_TRY_COMPILE([#include -#include -#include -#include -#include ], - [fd_set fds; -select(0, NULL, NULL, NULL, NULL);], xpdf_ok=yes, xpdf_ok=no) - if test $xpdf_ok = yes; then - AC_DEFINE(HAVE_SYS_BSDTYPES_H) - AC_MSG_RESULT([need sys/bsdtypes.h]) - else - AC_MSG_RESULT([problem]) - fi - fi -fi - -dnl ##### Look for header that defines FD_ZERO. -AC_MSG_CHECKING([FD_ZERO and strings.h or bstring.h]) -AC_TRY_COMPILE([#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif], -[fd_set fds; FD_ZERO(&fds);], xpdf_ok=yes, xpdf_ok=no) -if test $xpdf_ok = yes; then - AC_MSG_RESULT([not needed]) -else - AC_TRY_COMPILE([#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif], - [fd_set fds; FD_ZERO(&fds);], xpdf_ok=yes, xpdf_ok=no) - if test $xpdf_ok = yes; then - AC_DEFINE(HAVE_STRINGS_H) - AC_MSG_RESULT([need strings.h]) - else - AC_TRY_COMPILE([#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif], - [fd_set fds; FD_ZERO(&fds);], xpdf_ok=yes, xpdf_ok=no) - if test $xpdf_ok = yes; then - AC_DEFINE(HAVE_BSTRING_H) - AC_MSG_RESULT([need bstring.h]) - else - AC_MSG_RESULT([problem]) - fi - fi -fi - -dnl ##### Look for rewinddir. -AC_CHECK_FUNCS(rewinddir) -if test $ac_cv_func_rewinddir = no; then - AC_CHECK_LIB(cposix, rewinddir) -fi - -dnl ##### Checks for library functions. -AC_CHECK_FUNCS(popen) -dnl # This should use 'AC_CHECK_FUNCS(mkstemp)' but that fails if -dnl # the mkstemp exists in the library but isn't declared in the -dnl # include file (e.g., in cygwin 1.1.2). -AC_CACHE_CHECK([for mkstemp], -xpdf_cv_func_mkstemp, -[AC_TRY_LINK([#include -#include ], -[mkstemp("foo");], -xpdf_cv_func_mkstemp=yes, xpdf_cv_func_mkstemp=no)]) -if test "$xpdf_cv_func_mkstemp" = yes; then - AC_DEFINE(HAVE_MKSTEMP) -fi -dnl # Check for mkstemps, just like mkstemp. -AC_CACHE_CHECK([for mkstemps], -xpdf_cv_func_mkstemps, -[AC_TRY_LINK([#include -#include ], -[mkstemps("foo", 0);], -xpdf_cv_func_mkstemps=yes, xpdf_cv_func_mkstemps=no)]) -if test "$xpdf_cv_func_mkstemps" = yes; then - AC_DEFINE(HAVE_MKSTEMPS) -fi - -dnl ##### Check select argument type: on HP-UX before version 10, select -dnl ##### takes (int *) instead of (fd_set *). -AC_CACHE_CHECK([whether select takes fd_set arguments], -xpdf_cv_func_select_arg, -[AC_TRY_COMPILE([#include -#include -#include -#ifdef HAVE_SYS_SELECT_H -#include -#endif], -[fd_set fds; -select(1, &fds, &fds, &fds, 0);], -xpdf_cv_func_select_arg=yes, xpdf_cv_func_select_arg=no)]) -if test "$xpdf_cv_func_select_arg" != yes; then - AC_DEFINE(SELECT_TAKES_INT) -fi - -dnl ##### Check for std::sort. -AC_CACHE_CHECK([for std::sort], -xpdf_cv_func_std_sort, -[AC_COMPILE_IFELSE( - AC_LANG_PROGRAM([[#include -struct functor { - bool operator()(const int &i0, const int &i1) { return i0 < i1; } -};]], - [[int a[[100]]; -std::sort(a, a+100, functor());]]), -xpdf_cv_func_std_sort=yes, xpdf_cv_func_std_sort=no)]) -if test "$xpdf_cv_func_std_sort" = yes; then - AC_DEFINE(HAVE_STD_SORT) -fi - -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 ##### Check for libXpm. -if test -z "$no_x"; then - smr_CHECK_LIB(Xpm, Xpm, [pixmap library - used only for icon], - XpmCreatePixmapFromData, X11/xpm.h, - $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11, $X_CFLAGS) - AC_SUBST(Xpm_LIBS) - AC_SUBST(Xpm_CFLAGS) -fi - -dnl ##### Check for Motif (libXm). -if test -z "$no_x"; then - dnl # XextAddDisplay isn't defined in any header file, so we provide a - dnl # bogus prototype (so the compiler doesn't complain) and a bogus - dnl # header file (so the smr macro doesn't break). - smr_CHECK_LIB(Xext, Xext, [Motif library], - XextAddDisplay, X11/Xlib.h, - $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11, $X_CFLAGS, - [int XextAddDisplay();]) - AC_SUBST(Xext_LIBS) - AC_SUBST(Xext_CFLAGS) - smr_CHECK_LIB(Xp, Xp, [Motif library], - XpStartPage, X11/extensions/Print.h, - $X_LIBS $X_PRE_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11, $X_CFLAGS) - AC_SUBST(Xp_LIBS) - AC_SUBST(Xp_CFLAGS) - smr_CHECK_LIB(Xt, Xt, [Motif library], - XtAppInitialize, X11/Intrinsic.h, - $X_LIBS $X_PRE_LIBS $X_EXTRA_LIBS -lX11, $X_CFLAGS) - AC_SUBST(Xt_LIBS) - AC_SUBST(Xt_CFLAGS) - smr_CHECK_LIB(Xm, Xm, [Motif library], - XmCreateForm, Xm/XmAll.h, - $Xt_LIBS $X_LIBS $X_PRE_LIBS $Xp_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11, $X_CFLAGS) - AC_SUBST(Xm_LIBS) - AC_SUBST(Xm_CFLAGS) - smr_CHECK_LIB(Sgm, Sgm, [SGI Motif library], - SgCreateHorzPanedWindow, Sgm/HPanedW.h, - $Xm_LIBS $Xt_LIBS $X_LIBS $X_PRE_LIBS $Xp_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11, $X_CFLAGS) - AC_SUBST(Sgm_LIBS) - AC_SUBST(Sgm_CFLAGS) - - dnl # check for XtAppSetExitFlag, which didn't exist prior to X11R6 (?) - if test "x$smr_have_Xt_library" = xyes; then - AC_CHECK_LIB(Xt, XtAppSetExitFlag, - AC_DEFINE(HAVE_XTAPPSETEXITFLAG), , - [$Xt_LIBS $X_LIBS $X_PRE_LIBS $Xp_LIBS $Xext_LIBS $X_EXTRA_LIBS -lX11]) - fi -fi - -dnl ##### Check for t1lib. -smr_CHECK_LIB(t1, t1, [Type 1 font rasterizer], - T1_InitLib, t1lib.h, - -lm, $X_CFLAGS) -AC_SUBST(t1_LIBS) -AC_SUBST(t1_CFLAGS) - -dnl ##### Check for FreeType 2.x. -dnl ##### (Note: FT_Get_Name_Index was added in FT 2.0.5, and is -dnl ##### the reason that Xpdf requires 2.0.5+.) -smr_CHECK_LIB(freetype2, freetype, [FreeType2 font rasterizer - version 2.0.5+], - FT_Get_Name_Index, ft2build.h, -lm) -AC_SUBST(freetype2_LIBS) -AC_SUBST(freetype2_CFLAGS) -if test "x$smr_have_freetype2_library" = xyes; then - AC_DEFINE(HAVE_FREETYPE_FREETYPE_H) - AC_DEFINE(HAVE_SPLASH) -fi - -dnl ##### Check for libpaper (Debian). -smr_CHECK_LIB(libpaper, paper, [Debian libpaper], paperinit, paper.h) -AC_SUBST(libpaper_LIBS) -AC_SUBST(libpaper_CFLAGS) - -dnl ##### Disable X-specific stuff in top-level Makefile. -if test -n "$no_x" -o "x$smr_have_Xm_library" != xyes -o "x$smr_have_freetype2_library" != xyes; then - X="#" - XPDF_TARGET="all-no-x" -else - X="" - XPDF_TARGET="all" -fi -AC_SUBST(X) -AC_SUBST(XPDF_TARGET) - -dnl ##### Write the makefiles. -AC_OUTPUT(Makefile goo/Makefile fofi/Makefile splash/Makefile xpdf/Makefile) - -dnl ##### Warn user if X is missing. -if test -n "$no_x" -o "x$smr_have_Xm_library" != xyes -o "x$smr_have_freetype2_library" != xyes; then - if test -n "$no_x"; then - AC_MSG_WARN([Couldn't find X]); - fi - if test "x$smr_have_Xm_library" != xyes; then - AC_MSG_WARN([Couldn't find Motif]); - fi - if test "x$smr_have_freetype2_library" != xyes; then - AC_MSG_WARN([Couldn't find FreeType]); - fi - AC_MSG_WARN([-- You will be able to compile pdftops, pdftotext, - pdfinfo, pdffonts, and pdfimages, but not xpdf or pdftoppm]) -fi diff --git a/thirdparty/xpdf/3.02/src/dj_make.bat b/thirdparty/xpdf/3.02/src/dj_make.bat deleted file mode 100644 index 7a4155c0..00000000 --- a/thirdparty/xpdf/3.02/src/dj_make.bat +++ /dev/null @@ -1,83 +0,0 @@ -set CC=gcc -set CFLAGS=-g -O2 -I.. -I..\fofi -I..\goo -set CXX=gpp -set CXXFLAGS=%CFLAGS% -set LIBPROG=ar - -copy aconf-dj.h aconf.h - -cd goo -%CXX% %CXXFLAGS% -c GHash.cc -%CXX% %CXXFLAGS% -c GList.cc -%CXX% %CXXFLAGS% -c GString.cc -%CXX% %CXXFLAGS% -c gmem.cc -%CXX% %CXXFLAGS% -c gmempp.cc -%CXX% %CXXFLAGS% -c gfile.cc -%CC% %CFLAGS% -c parseargs.c -del libGoo.a -%LIBPROG% -rc libGoo.a GHash.o GList.o GString.o gmempp.o gfile.o gmem.o parseargs.o - -cd ..\fofi -%CXX% %CXXFLAGS% -c FoFiBase.cc -%CXX% %CXXFLAGS% -c FoFiEncodings.cc -%CXX% %CXXFLAGS% -c FoFiIdentifier.cc -%CXX% %CXXFLAGS% -c FoFiTrueType.cc -%CXX% %CXXFLAGS% -c FoFiType1.cc -%CXX% %CXXFLAGS% -c FoFiType1C.cc -%LIBPROG% -rc libfofi.a FoFiBase.o FoFiEncodings.o FoFiIdentifier.o FoFiTrueType.o FoFiType1.o FoFiType1C.o - -cd ..\xpdf -del *.o -%CXX% %CXXFLAGS% -c Annot.cc -%CXX% %CXXFLAGS% -c Array.cc -%CXX% %CXXFLAGS% -c BuiltinFont.cc -%CXX% %CXXFLAGS% -c BuiltinFontTables.cc -%CXX% %CXXFLAGS% -c CMap.cc -%CXX% %CXXFLAGS% -c Catalog.cc -%CXX% %CXXFLAGS% -c CharCodeToUnicode.cc -%CXX% %CXXFLAGS% -c Decrypt.cc -%CXX% %CXXFLAGS% -c Dict.cc -%CXX% %CXXFLAGS% -c Error.cc -%CXX% %CXXFLAGS% -c FontEncodingTables.cc -%CXX% %CXXFLAGS% -c Function.cc -%CXX% %CXXFLAGS% -c Gfx.cc -%CXX% %CXXFLAGS% -c GfxFont.cc -%CXX% %CXXFLAGS% -c GfxState.cc -%CXX% %CXXFLAGS% -c GlobalParams.cc -%CXX% %CXXFLAGS% -c ImageOutputDev.cc -%CXX% %CXXFLAGS% -c JArithmeticDecoder.cc -%CXX% %CXXFLAGS% -c JBIG2Stream.cc -%CXX% %CXXFLAGS% -c JPXStream.cc -%CXX% %CXXFLAGS% -c Lexer.cc -%CXX% %CXXFLAGS% -c Link.cc -%CXX% %CXXFLAGS% -c NameToCharCode.cc -%CXX% %CXXFLAGS% -c Object.cc -%CXX% %CXXFLAGS% -c OptionalContent.cc -%CXX% %CXXFLAGS% -c Outline.cc -%CXX% %CXXFLAGS% -c OutputDev.cc -%CXX% %CXXFLAGS% -c PDFDoc.cc -%CXX% %CXXFLAGS% -c PDFDocEncoding.cc -%CXX% %CXXFLAGS% -c PSOutputDev.cc -%CXX% %CXXFLAGS% -c PSTokenizer.cc -%CXX% %CXXFLAGS% -c Page.cc -%CXX% %CXXFLAGS% -c Parser.cc -%CXX% %CXXFLAGS% -c SecurityHandler.cc -%CXX% %CXXFLAGS% -c Stream.cc -%CXX% %CXXFLAGS% -c TextOutputDev.cc -%CXX% %CXXFLAGS% -c UnicodeMap.cc -%CXX% %CXXFLAGS% -c UnicodeTypeTable.cc -%CXX% %CXXFLAGS% -c XRef.cc -del libxpdf.a -%LIBPROG% -rc libxpdf.a *.o - -%CXX% %CXXFLAGS% -o pdftops.exe pdftops.cc libxpdf.a ..\fofi\libfofi.a ..\goo\libGoo.a - -%CXX% %CXXFLAGS% -o pdftotext.exe pdftotext.cc libxpdf.a ..\fofi\libfofi.a ..\goo\libGoo.a - -%CXX% %CXXFLAGS% -o pdfinfo.exe pdfinfo.cc libxpdf.a ..\fofi\libfofi.a ..\goo\libGoo.a - -%CXX% %CXXFLAGS% -o pdffonts.exe pdffonts.cc libxpdf.a ..\fofi\libfofi.a ..\goo\libGoo.a - -%CXX% %CXXFLAGS% -o pdfimages.exe pdfimages.cc libxpdf.a ..\fofi\libfofi.a ..\goo\libGoo.a - -cd .. diff --git a/thirdparty/xpdf/3.02/src/doc/pdffonts.1 b/thirdparty/xpdf/3.02/src/doc/pdffonts.1 deleted file mode 100644 index 4cb3059c..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdffonts.1 +++ /dev/null @@ -1,142 +0,0 @@ -.\" Copyright 1999-2007 Glyph & Cog, LLC -.TH pdffonts 1 "27 February 2007" -.SH NAME -pdffonts \- Portable Document Format (PDF) font analyzer (version -3.02) -.SH SYNOPSIS -.B pdffonts -[options] -.RI [ PDF-file ] -.SH DESCRIPTION -.B Pdffonts -lists the fonts used in a Portable Document Format (PDF) file along -with various information for each font. -.PP -The following information is listed for each font: -.TP -.B name -the font name, exactly as given in the PDF file (potentially including -a subset prefix) -.TP -.B type -the font type -- see below for details -.TP -.B emb -"yes" if the font is embedded in the PDF file -.TP -.B sub -"yes" if the font is a subset -.TP -.B uni -"yes" if there is an explicit "ToUnicode" map in the PDF file (the -absence of a ToUnicode map doesn't necessarily mean that the text -can't be converted to Unicode) -.TP -.B object ID -the font dictionary object ID (number and generation) -.PP -PDF files can contain the following types of fonts: -.PP -.RS -Type 1 -.RE -.RS -Type 1C -- aka Compact Font Format (CFF) -.RE -.RS -Type 1C (OT) -- OpenType with 8-bit CFF data -.RE -.RS -Type 3 -.RE -.RS -TrueType -.RE -.RS -TrueType (OT) -- OpenType with 8-bit TrueType data -.RE -.RS -CID Type 0 -- 16-bit font with no specified type -.RE -.RS -CID Type 0C -- 16-bit PostScript CFF font -.RE -.RS -CID Type 0C (OT) -- OpenType with CID CFF data -.RE -.RS -CID TrueType -- 16-bit TrueType font -.RE -.RS -CID TrueType (OT) -- OpenType with CID TrueType data -.RE -.SH CONFIGURATION FILE -Pdffonts reads a configuration file at startup. It first tries to -find the user's private config file, ~/.xpdfrc. If that doesn't -exist, it looks for a system-wide config file, typically -/usr/local/etc/xpdfrc (but this location can be changed when pdffonts -is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands. These are listed in square brackets with the description of -the corresponding command line option. -.TP -.BI \-f " number" -Specifies the first page to analyze. -.TP -.BI \-l " number" -Specifies the last page to analyze. -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.BI \-cfg " config-file" -Read -.I config-file -in place of ~/.xpdfrc or the system-wide config file. -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The pdffonts software and documentation are copyright 1996-2007 Glyph -& Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftops (1), -.BR pdftotext (1), -.BR pdfinfo (1), -.BR pdftoppm (1), -.BR pdfimages (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/pdffonts.cat b/thirdparty/xpdf/3.02/src/doc/pdffonts.cat deleted file mode 100644 index 6a0d7ab7..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdffonts.cat +++ /dev/null @@ -1,104 +0,0 @@ -pdffonts(1) pdffonts(1) - - - -NAME - pdffonts - Portable Document Format (PDF) font analyzer (version 3.02) - -SYNOPSIS - pdffonts [options] [PDF-file] - -DESCRIPTION - Pdffonts lists the fonts used in a Portable Document Format (PDF) file - along with various information for each font. - - The following information is listed for each font: - - name the font name, exactly as given in the PDF file (potentially - including a subset prefix) - - type the font type -- see below for details - - emb "yes" if the font is embedded in the PDF file - - sub "yes" if the font is a subset - - uni "yes" if there is an explicit "ToUnicode" map in the PDF file - (the absence of a ToUnicode map doesn't necessarily mean that - the text can't be converted to Unicode) - - object ID - the font dictionary object ID (number and generation) - - PDF files can contain the following types of fonts: - - Type 1 - Type 1C -- aka Compact Font Format (CFF) - Type 1C (OT) -- OpenType with 8-bit CFF data - Type 3 - TrueType - TrueType (OT) -- OpenType with 8-bit TrueType data - CID Type 0 -- 16-bit font with no specified type - CID Type 0C -- 16-bit PostScript CFF font - CID Type 0C (OT) -- OpenType with CID CFF data - CID TrueType -- 16-bit TrueType font - CID TrueType (OT) -- OpenType with CID TrueType data - -CONFIGURATION FILE - Pdffonts reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdffonts is built). See the - xpdfrc(5) man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to analyze. - - -l number - Specifies the last page to analyze. - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The pdffonts software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - -SEE ALSO - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 pdffonts(1) diff --git a/thirdparty/xpdf/3.02/src/doc/pdffonts.hlp b/thirdparty/xpdf/3.02/src/doc/pdffonts.hlp deleted file mode 100644 index f3ce1e00..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdffonts.hlp +++ /dev/null @@ -1,114 +0,0 @@ -! Generated automatically by mantohlp -1 pdffonts - - pdffonts - Portable Document Format (PDF) font analyzer (version - - pdffonts [options] [PDF-file] - - Pdffonts lists the fonts used in a Portable Document Format (PDF) file - along with various information for each font. - - The following information is listed for each font: - - name the font name, exactly as given in the PDF file (potentially - including a subset prefix) - - type the font type -- see below for details - - emb "yes" if the font is embedded in the PDF file - - sub "yes" if the font is a subset - - uni "yes" if there is an explicit "ToUnicode" map in the PDF file - (the absence of a ToUnicode map doesn't necessarily mean that - the text can't be converted to Unicode) - - object ID - the font dictionary object ID (number and generation) - - PDF files can contain the following types of fonts: - - Type 1 - Type 1C -- aka Compact Font Format (CFF) - Type 1C (OT) -- OpenType with 8-bit CFF data - Type 3 - TrueType - TrueType (OT) -- OpenType with 8-bit TrueType data - CID Type 0 -- 16-bit font with no specified type - CID Type 0C -- 16-bit PostScript CFF font - CID Type 0C (OT) -- OpenType with CID CFF data - CID TrueType -- 16-bit TrueType font - CID TrueType (OT) -- OpenType with CID TrueType data - - () - -2 ONFIGURATION_FIL - - Pdffonts reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdffonts is built). See the - xpdfrc(5) man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to analyze. - - -l number - Specifies the last page to analyze. - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The pdffonts software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/pdfimages.1 b/thirdparty/xpdf/3.02/src/doc/pdfimages.1 deleted file mode 100644 index 84401479..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdfimages.1 +++ /dev/null @@ -1,102 +0,0 @@ -.\" Copyright 1998-2007 Glyph & Cog, LLC -.TH pdfimages 1 "27 February 2007" -.SH NAME -pdfimages \- Portable Document Format (PDF) image extractor -(version 3.02) -.SH SYNOPSIS -.B pdfimages -[options] -.I PDF-file image-root -.SH DESCRIPTION -.B Pdfimages -saves images from a Portable Document Format (PDF) file as Portable -Pixmap (PPM), Portable Bitmap (PBM), or JPEG files. -.PP -Pdfimages reads the PDF file, scans one or more pages, -.IR PDF-file , -and writes one PPM, PBM, or JPEG file for each image, -.IR image-root - nnn . xxx , -where -.I nnn -is the image number and -.I xxx -is the image type (.ppm, .pbm, .jpg). -.PP -NB: pdfimages extracts the raw image data from the PDF file, without -performing any additional transforms. Any rotation, clipping, -color inversion, etc. done by the PDF content stream is ignored. -.SH CONFIGURATION FILE -Pdfimages reads a configuration file at startup. It first tries to -find the user's private config file, ~/.xpdfrc. If that doesn't -exist, it looks for a system-wide config file, typically -/usr/local/etc/xpdfrc (but this location can be changed when pdfimages -is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands. These are listed in square brackets with the description of -the corresponding command line option. -.TP -.BI \-f " number" -Specifies the first page to scan. -.TP -.BI \-l " number" -Specifies the last page to scan. -.TP -.B \-j -Normally, all images are written as PBM (for monochrome images) or PPM -(for non-monochrome images) files. With this option, images in DCT -format are saved as JPEG files. All non-DCT images are saved in -PBM/PPM format as usual. -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.B \-q -Don't print any messages or errors. -.RB "[config file: " errQuiet ] -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The pdfimages software and documentation are copyright 1998-2007 Glyph -& Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftops (1), -.BR pdftotext (1), -.BR pdfinfo (1), -.BR pdffonts (1), -.BR pdftoppm (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/pdfimages.cat b/thirdparty/xpdf/3.02/src/doc/pdfimages.cat deleted file mode 100644 index c6e1d6c0..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdfimages.cat +++ /dev/null @@ -1,85 +0,0 @@ -pdfimages(1) pdfimages(1) - - - -NAME - pdfimages - Portable Document Format (PDF) image extractor (version - 3.02) - -SYNOPSIS - pdfimages [options] PDF-file image-root - -DESCRIPTION - Pdfimages saves images from a Portable Document Format (PDF) file as - Portable Pixmap (PPM), Portable Bitmap (PBM), or JPEG files. - - Pdfimages reads the PDF file, scans one or more pages, PDF-file, and - writes one PPM, PBM, or JPEG file for each image, image-root-nnn.xxx, - where nnn is the image number and xxx is the image type (.ppm, .pbm, - .jpg). - - NB: pdfimages extracts the raw image data from the PDF file, without - performing any additional transforms. Any rotation, clipping, color - inversion, etc. done by the PDF content stream is ignored. - -CONFIGURATION FILE - Pdfimages reads a configuration file at startup. It first tries to - find the user's private config file, ~/.xpdfrc. If that doesn't exist, - it looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdfimages is built). See the - xpdfrc(5) man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to scan. - - -l number - Specifies the last page to scan. - - -j Normally, all images are written as PBM (for monochrome images) - or PPM (for non-monochrome images) files. With this option, - images in DCT format are saved as JPEG files. All non-DCT - images are saved in PBM/PPM format as usual. - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The pdfimages software and documentation are copyright 1998-2007 Glyph - & Cog, LLC. - -SEE ALSO - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdffonts(1), - pdftoppm(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 pdfimages(1) diff --git a/thirdparty/xpdf/3.02/src/doc/pdfimages.hlp b/thirdparty/xpdf/3.02/src/doc/pdfimages.hlp deleted file mode 100644 index eabe1acd..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdfimages.hlp +++ /dev/null @@ -1,94 +0,0 @@ -! Generated automatically by mantohlp -1 pdfimages - - pdfimages - Portable Document Format (PDF) image extractor - - pdfimages [options] PDF-file image-root - - Pdfimages saves images from a Portable Document Format (PDF) file as - Portable Pixmap (PPM), Portable Bitmap (PBM), or JPEG files. - - Pdfimages reads the PDF file, scans one or more pages, PDF-file, and - writes one PPM, PBM, or JPEG file for each image, image-root-nnn.xxx, - where nnn is the image number and xxx is the image type (.ppm, .pbm, - .jpg). - - NB: pdfimages extracts the raw image data from the PDF file, without - performing any additional transforms. Any rotation, clipping, color - inversion, etc. done by the PDF content stream is ignored. - - () - -2 ONFIGURATION_FIL - - Pdfimages reads a configuration file at startup. It first tries to - find the user's private config file, ~/.xpdfrc. If that doesn't exist, - it looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdfimages is built). See the - xpdfrc(5) man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to scan. - - -l number - Specifies the last page to scan. - - -j Normally, all images are written as PBM (for monochrome images) - or PPM (for non-monochrome images) files. With this option, - images in DCT format are saved as JPEG files. All non-DCT - images are saved in PBM/PPM format as usual. - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The pdfimages software and documentation are copyright 1998-2007 Glyph - & Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdffonts(1), - pdftoppm(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/pdfinfo.1 b/thirdparty/xpdf/3.02/src/doc/pdfinfo.1 deleted file mode 100644 index 9a4690ad..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdfinfo.1 +++ /dev/null @@ -1,161 +0,0 @@ -.\" Copyright 1999-2007 Glyph & Cog, LLC -.TH pdfinfo 1 "27 February 2007" -.SH NAME -pdfinfo \- Portable Document Format (PDF) document information -extractor (version 3.02) -.SH SYNOPSIS -.B pdfinfo -[options] -.RI [ PDF-file ] -.SH DESCRIPTION -.B Pdfinfo -prints the contents of the \'Info' dictionary (plus some other useful -information) from a Portable Document Format (PDF) file. -.PP -The \'Info' dictionary contains the following values: -.PP -.RS -title -.RE -.RS -subject -.RE -.RS -keywords -.RE -.RS -author -.RE -.RS -creator -.RE -.RS -producer -.RE -.RS -creation date -.RE -.RS -modification date -.RE -.PP -In addition, the following information is printed: -.PP -.RS -tagged (yes/no) -.RE -.RS -form (AcroForm / XFA / none) -.RE -.RS -page count -.RE -.RS -encrypted flag (yes/no) -.RE -.RS -print and copy permissions (if encrypted) -.RE -.RS -page size -.RE -.RS -file size -.RE -.RS -linearized (yes/no) -.RE -.RS -PDF version -.RE -.RS -metadata (only if requested) -.RE -.SH CONFIGURATION FILE -Pdfinfo reads a configuration file at startup. It first tries to find -the user's private config file, ~/.xpdfrc. If that doesn't exist, it -looks for a system-wide config file, typically /usr/local/etc/xpdfrc -(but this location can be changed when pdfinfo is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands. These are listed in square brackets with the description of -the corresponding command line option. -.TP -.BI \-f " number" -Specifies the first page to examine. If multiple pages are requested -using the "-f" and "-l" options, the size of each requested page (and, -optionally, the bounding boxes for each requested page) are printed. -Otherwise, only page one is examined. -.TP -.BI \-l " number" -Specifies the last page to examine. -.TP -.B \-box -Prints the page box bounding boxes: MediaBox, CropBox, BleedBox, -TrimBox, and ArtBox. -.TP -.B \-meta -Prints document-level metadata. (This is the "Metadata" stream from -the PDF file's Catalog object.) -.TP -.BI \-enc " encoding-name" -Sets the encoding to use for text output. The -.I encoding\-name -must be defined with the unicodeMap command (see -.BR xpdfrc (5)). -This defaults to "Latin1" (which is a built-in encoding). -.RB "[config file: " textEncoding ] -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.BI \-cfg " config-file" -Read -.I config-file -in place of ~/.xpdfrc or the system-wide config file. -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The pdfinfo software and documentation are copyright 1996-2007 Glyph & -Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftops (1), -.BR pdftotext (1), -.BR pdffonts (1), -.BR pdftoppm (1), -.BR pdfimages (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/pdfinfo.cat b/thirdparty/xpdf/3.02/src/doc/pdfinfo.cat deleted file mode 100644 index 0a664775..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdfinfo.cat +++ /dev/null @@ -1,113 +0,0 @@ -pdfinfo(1) pdfinfo(1) - - - -NAME - pdfinfo - Portable Document Format (PDF) document information extractor - (version 3.02) - -SYNOPSIS - pdfinfo [options] [PDF-file] - -DESCRIPTION - Pdfinfo prints the contents of the 'Info' dictionary (plus some other - useful information) from a Portable Document Format (PDF) file. - - The 'Info' dictionary contains the following values: - - title - subject - keywords - author - creator - producer - creation date - modification date - - In addition, the following information is printed: - - tagged (yes/no) - form (AcroForm / XFA / none) - page count - encrypted flag (yes/no) - print and copy permissions (if encrypted) - page size - file size - linearized (yes/no) - PDF version - metadata (only if requested) - -CONFIGURATION FILE - Pdfinfo reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdfinfo is built). See the - xpdfrc(5) man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to examine. If multiple pages are - requested using the "-f" and "-l" options, the size of each - requested page (and, optionally, the bounding boxes for each - requested page) are printed. Otherwise, only page one is exam- - ined. - - -l number - Specifies the last page to examine. - - -box Prints the page box bounding boxes: MediaBox, CropBox, BleedBox, - TrimBox, and ArtBox. - - -meta Prints document-level metadata. (This is the "Metadata" stream - from the PDF file's Catalog object.) - - -enc encoding-name - Sets the encoding to use for text output. The encoding-name - must be defined with the unicodeMap command (see xpdfrc(5)). - This defaults to "Latin1" (which is a built-in encoding). [con- - fig file: textEncoding] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The pdfinfo software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - -SEE ALSO - xpdf(1), pdftops(1), pdftotext(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 pdfinfo(1) diff --git a/thirdparty/xpdf/3.02/src/doc/pdfinfo.hlp b/thirdparty/xpdf/3.02/src/doc/pdfinfo.hlp deleted file mode 100644 index 9068ecc7..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdfinfo.hlp +++ /dev/null @@ -1,122 +0,0 @@ -! Generated automatically by mantohlp -1 pdfinfo - - pdfinfo - Portable Document Format (PDF) document information - - pdfinfo [options] [PDF-file] - - Pdfinfo prints the contents of the 'Info' dictionary (plus some other - useful information) from a Portable Document Format (PDF) file. - - The 'Info' dictionary contains the following values: - - title - subject - keywords - author - creator - producer - creation date - modification date - - In addition, the following information is printed: - - tagged (yes/no) - form (AcroForm / XFA / none) - page count - encrypted flag (yes/no) - print and copy permissions (if encrypted) - page size - file size - linearized (yes/no) - PDF version - metadata (only if requested) - - () - -2 ONFIGURATION_FIL - - Pdfinfo reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdfinfo is built). See the - xpdfrc(5) man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to examine. If multiple pages are - requested using the "-f" and "-l" options, the size of each - requested page (and, optionally, the bounding boxes for each - requested page) are printed. Otherwise, only page one is exam- - ined. - - -l number - Specifies the last page to examine. - - -box Prints the page box bounding boxes: MediaBox, CropBox, BleedBox, - TrimBox, and ArtBox. - - -meta Prints document-level metadata. (This is the "Metadata" stream - from the PDF file's Catalog object.) - - -enc encoding-name - Sets the encoding to use for text output. The encoding-name - must be defined with the unicodeMap command (see xpdfrc(5)). - This defaults to "Latin1" (which is a built-in encoding). [con- - fig file: textEncoding] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The pdfinfo software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftops(1), pdftotext(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/pdftoppm.1 b/thirdparty/xpdf/3.02/src/doc/pdftoppm.1 deleted file mode 100644 index 5f3c1b14..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftoppm.1 +++ /dev/null @@ -1,123 +0,0 @@ -.\" Copyright 2005-2007 Glyph & Cog, LLC -.TH pdftoppm 1 "27 February 2007" -.SH NAME -pdftoppm \- Portable Document Format (PDF) to Portable Pixmap (PPM) -converter (version 3.02) -.SH SYNOPSIS -.B pdftoppm -[options] -.I PDF-file PPM-root -.SH DESCRIPTION -.B Pdftoppm -converts Portable Document Format (PDF) files to color image files in -Portable Pixmap (PPM) format, grayscale image files in Portable -Graymap (PGM) format, or monochrome image files in Portable Bitmap -(PBM) format. -.PP -Pdftoppm reads the PDF file, -.IR PDF-file , -and writes one PPM file for each page, -.IR PPM-root - nnnnnn .ppm, -where -.I nnnnnn -is the page number. -If -.I PPM-root -is \'-', the image is sent to stdout (this is probably only useful -when converting a single page). -.SH CONFIGURATION FILE -Pdftoppm reads a configuration file at startup. It first tries to -find the user's private config file, ~/.xpdfrc. If that doesn't -exist, it looks for a system-wide config file, typically -/usr/local/etc/xpdfrc (but this location can be changed when pdftoppm -is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands. These are listed in square brackets with the description of -the corresponding command line option. -.TP -.BI \-f " number" -Specifies the first page to convert. -.TP -.BI \-l " number" -Specifies the last page to convert. -.TP -.BI \-r " number" -Specifies the resolution, in DPI. The default is 150 DPI. -.TP -.B \-mono -Generate a monochrome PBM file (instead of a color PPM file). -.TP -.B \-gray -Generate a grayscale PGM file (instead of a color PPM file). -.TP -.BI \-t1lib " yes | no" -Enable or disable t1lib (a Type 1 font rasterizer). This defaults to -"yes". -.RB "[config file: " enableT1lib ] -.TP -.BI \-freetype " yes | no" -Enable or disable FreeType (a TrueType / Type 1 font rasterizer). -This defaults to "yes". -.RB "[config file: " enableFreeType ] -.TP -.BI \-aa " yes | no" -Enable or disable font anti-aliasing. This defaults to "yes". -.RB "[config file: " antialias ] -.TP -.BI \-aaVector " yes | no" -Enable or disable vector anti-aliasing. This defaults to "yes". -.RB "[config file: " vectorAntialias ] -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.B \-q -Don't print any messages or errors. -.RB "[config file: " errQuiet ] -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The pdftoppm software and documentation are copyright 1996-2007 Glyph -& Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftops (1), -.BR pdftotext (1), -.BR pdfinfo (1), -.BR pdffonts (1), -.BR pdfimages (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/pdftoppm.cat b/thirdparty/xpdf/3.02/src/doc/pdftoppm.cat deleted file mode 100644 index 448f3cb7..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftoppm.cat +++ /dev/null @@ -1,101 +0,0 @@ -pdftoppm(1) pdftoppm(1) - - - -NAME - pdftoppm - Portable Document Format (PDF) to Portable Pixmap (PPM) con- - verter (version 3.02) - -SYNOPSIS - pdftoppm [options] PDF-file PPM-root - -DESCRIPTION - Pdftoppm converts Portable Document Format (PDF) files to color image - files in Portable Pixmap (PPM) format, grayscale image files in Porta- - ble Graymap (PGM) format, or monochrome image files in Portable Bitmap - (PBM) format. - - Pdftoppm reads the PDF file, PDF-file, and writes one PPM file for each - page, PPM-root-nnnnnn.ppm, where nnnnnn is the page number. If PPM- - root is '-', the image is sent to stdout (this is probably only useful - when converting a single page). - -CONFIGURATION FILE - Pdftoppm reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdftoppm is built). See the - xpdfrc(5) man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to convert. - - -l number - Specifies the last page to convert. - - -r number - Specifies the resolution, in DPI. The default is 150 DPI. - - -mono Generate a monochrome PBM file (instead of a color PPM file). - - -gray Generate a grayscale PGM file (instead of a color PPM file). - - -t1lib yes | no - Enable or disable t1lib (a Type 1 font rasterizer). This - defaults to "yes". [config file: enableT1lib] - - -freetype yes | no - Enable or disable FreeType (a TrueType / Type 1 font raster- - izer). This defaults to "yes". [config file: enableFreeType] - - -aa yes | no - Enable or disable font anti-aliasing. This defaults to "yes". - [config file: antialias] - - -aaVector yes | no - Enable or disable vector anti-aliasing. This defaults to "yes". - [config file: vectorAntialias] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The pdftoppm software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - -SEE ALSO - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdffonts(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 pdftoppm(1) diff --git a/thirdparty/xpdf/3.02/src/doc/pdftoppm.hlp b/thirdparty/xpdf/3.02/src/doc/pdftoppm.hlp deleted file mode 100644 index 6c91f27e..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftoppm.hlp +++ /dev/null @@ -1,110 +0,0 @@ -! Generated automatically by mantohlp -1 pdftoppm - - pdftoppm - Portable Document Format (PDF) to Portable Pixmap (PPM) - - pdftoppm [options] PDF-file PPM-root - - Pdftoppm converts Portable Document Format (PDF) files to color image - files in Portable Pixmap (PPM) format, grayscale image files in Porta- - ble Graymap (PGM) format, or monochrome image files in Portable Bitmap - (PBM) format. - - Pdftoppm reads the PDF file, PDF-file, and writes one PPM file for each - page, PPM-root-nnnnnn.ppm, where nnnnnn is the page number. If PPM- - root is '-', the image is sent to stdout (this is probably only useful - when converting a single page). - - () - -2 ONFIGURATION_FIL - - Pdftoppm reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdftoppm is built). See the - xpdfrc(5) man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to convert. - - -l number - Specifies the last page to convert. - - -r number - Specifies the resolution, in DPI. The default is 150 DPI. - - -mono Generate a monochrome PBM file (instead of a color PPM file). - - -gray Generate a grayscale PGM file (instead of a color PPM file). - - -t1lib yes | no - Enable or disable t1lib (a Type 1 font rasterizer). This - defaults to "yes". [config file: enableT1lib] - - -freetype yes | no - Enable or disable FreeType (a TrueType / Type 1 font raster- - izer). This defaults to "yes". [config file: enableFreeType] - - -aa yes | no - Enable or disable font anti-aliasing. This defaults to "yes". - [config file: antialias] - - -aaVector yes | no - Enable or disable vector anti-aliasing. This defaults to "yes". - [config file: vectorAntialias] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The pdftoppm software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdffonts(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/pdftops.1 b/thirdparty/xpdf/3.02/src/doc/pdftops.1 deleted file mode 100644 index c9ec258f..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftops.1 +++ /dev/null @@ -1,235 +0,0 @@ -.\" Copyright 1996-2007 Glyph & Cog, LLC -.TH pdftops 1 "27 February 2007" -.SH NAME -pdftops \- Portable Document Format (PDF) to PostScript converter -(version 3.02) -.SH SYNOPSIS -.B pdftops -[options] -.RI [ PDF-file -.RI [ PS-file ]] -.SH DESCRIPTION -.B Pdftops -converts Portable Document Format (PDF) files to PostScript so they -can be printed. -.PP -Pdftops reads the PDF file, -.IR PDF-file , -and writes a PostScript file, -.IR PS-file . -If -.I PS-file -is not specified, pdftops converts -.I file.pdf -to -.I file.ps -(or -.I file.eps -with the -eps option). If -.I PS-file -is \'-', the PostScript is sent to stdout. -.SH CONFIGURATION FILE -Pdftops reads a configuration file at startup. It first tries to find -the user's private config file, ~/.xpdfrc. If that doesn't exist, it -looks for a system-wide config file, typically /usr/local/etc/xpdfrc -(but this location can be changed when pdftops is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands. These are listed in square brackets with the description of -the corresponding command line option. -.TP -.BI \-f " number" -Specifies the first page to print. -.TP -.BI \-l " number" -Specifies the last page to print. -.TP -.B \-level1 -Generate Level 1 PostScript. The resulting PostScript files will be -significantly larger (if they contain images), but will print on Level -1 printers. This also converts all images to black and white. No -more than one of the PostScript level options (-level1, -level1sep, --level2, -level2sep, -level3, -level3Sep) may be given. -.RB "[config file: " psLevel ] -.TP -.B \-level1sep -Generate Level 1 separable PostScript. All colors are converted to -CMYK. Images are written with separate stream data for the four -components. -.RB "[config file: " psLevel ] -.TP -.B \-level2 -Generate Level 2 PostScript. Level 2 supports color images and image -compression. This is the default setting. -.RB "[config file: " psLevel ] -.TP -.B \-level2sep -Generate Level 2 separable PostScript. All colors are converted to -CMYK. The PostScript separation convention operators are used to -handle custom (spot) colors. -.RB "[config file: " psLevel ] -.TP -.B \-level3 -Generate Level 3 PostScript. This enables all Level 2 features plus -CID font embedding and masked image generation. -.RB "[config file: " psLevel ] -.TP -.B \-level3Sep -Generate Level 3 separable PostScript. The separation handling is the -same as for -level2Sep. -.RB "[config file: " psLevel ] -.TP -.B \-eps -Generate an Encapsulated PostScript (EPS) file. An EPS file contains -a single image, so if you use this option with a multi-page PDF file, -you must use -f and -l to specify a single page. No more than one of -the mode options (-eps, -form) may be given. -.TP -.B \-form -Generate a PostScript form which can be imported by software that -understands forms. A form contains a single page, so if you use this -option with a multi-page PDF file, you must use -f and -l to specify a -single page. The -level1 option cannot be used with -form. -.TP -.B \-opi -Generate OPI comments for all images and forms which have OPI -information. (This option is only available if pdftops was compiled -with OPI support.) -.RB "[config file: " psOPI ] -.TP -.B \-noembt1 -By default, any Type 1 fonts which are embedded in the PDF file are -copied into the PostScript file. This option causes pdftops to -substitute base fonts instead. Embedded fonts make PostScript files -larger, but may be necessary for readable output. -.RB "[config file: " psEmbedType1Fonts ] -.TP -.B \-noembtt -By default, any TrueType fonts which are embedded in the PDF file are -copied into the PostScript file. This option causes pdftops to -substitute base fonts instead. Embedded fonts make PostScript files -larger, but may be necessary for readable output. Also, some -PostScript interpreters do not have TrueType rasterizers. -.RB "[config file: " psEmbedTrueTypeFonts ] -.TP -.B \-noembcidps -By default, any CID PostScript fonts which are embedded in the PDF -file are copied into the PostScript file. This option disables that -embedding. No attempt is made to substitute for non-embedded CID -PostScript fonts. -.RB "[config file: " psEmbedCIDPostScriptFonts ] -.TP -.B \-noembcidtt -By default, any CID TrueType fonts which are embedded in the PDF file -are copied into the PostScript file. This option disables that -embedding. No attempt is made to substitute for non-embedded CID -TrueType fonts. -.RB "[config file: " psEmbedCIDTrueTypeFonts ] -.TP -.B \-preload -Convert PDF forms to PS procedures, and preload image data. This uses -more memory in the PostScript interpreter, but generates significantly -smaller PS files in situations where, e.g., the same image is drawn on -every page of a long document. -.TP -.BI \-paper " size" -Set the paper size to one of "letter", "legal", "A4", or "A3". This -can also be set to "match", which will set the paper size to match the -size specified in the PDF file. -.RB "[config file: " psPaperSize ] -.TP -.BI \-paperw " size" -Set the paper width, in points. -.RB "[config file: " psPaperSize ] -.TP -.BI \-paperh " size" -Set the paper height, in points. -.RB "[config file: " psPaperSize ] -.TP -.B \-nocrop -By default, output is cropped to the CropBox specified in the PDF -file. This option disables cropping. -.RB "[config file: " psCrop ] -.TP -.B \-expand -Expand PDF pages smaller than the paper to fill the paper. By -default, these pages are not scaled. -.RB "[config file: " psExpandSmaller ] -.TP -.B \-noshrink -Don't scale PDF pages which are larger than the paper. By default, -pages larger than the paper are shrunk to fit. -.RB "[config file: " psShrinkLarger ] -.TP -.B \-nocenter -By default, PDF pages smaller than the paper (after any scaling) are -centered on the paper. This option causes them to be aligned to the -lower-left corner of the paper instead. -.RB "[config file: " psCenter ] -.TP -.B \-pagecrop -Treat the CropBox as the PDF page size. By default, the MediaBox is -used as the page size. -.TP -.B \-duplex -Set the Duplex pagedevice entry in the PostScript file. This tells -duplex-capable printers to enable duplexing. -.RB "[config file: " psDuplex ] -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.B \-q -Don't print any messages or errors. -.RB "[config file: " errQuiet ] -.TP -.BI \-cfg " config-file" -Read -.I config-file -in place of ~/.xpdfrc or the system-wide config file. -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The pdftops software and documentation are copyright 1996-2007 Glyph & -Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftotext (1), -.BR pdfinfo (1), -.BR pdffonts (1), -.BR pdftoppm (1), -.BR pdfimages (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/pdftops.cat b/thirdparty/xpdf/3.02/src/doc/pdftops.cat deleted file mode 100644 index e24b4d90..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftops.cat +++ /dev/null @@ -1,202 +0,0 @@ -pdftops(1) pdftops(1) - - - -NAME - pdftops - Portable Document Format (PDF) to PostScript converter (ver- - sion 3.02) - -SYNOPSIS - pdftops [options] [PDF-file [PS-file]] - -DESCRIPTION - Pdftops converts Portable Document Format (PDF) files to PostScript so - they can be printed. - - Pdftops reads the PDF file, PDF-file, and writes a PostScript file, PS- - file. If PS-file is not specified, pdftops converts file.pdf to - file.ps (or file.eps with the -eps option). If PS-file is '-', the - PostScript is sent to stdout. - -CONFIGURATION FILE - Pdftops reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdftops is built). See the - xpdfrc(5) man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to print. - - -l number - Specifies the last page to print. - - -level1 - Generate Level 1 PostScript. The resulting PostScript files - will be significantly larger (if they contain images), but will - print on Level 1 printers. This also converts all images to - black and white. No more than one of the PostScript level - options (-level1, -level1sep, -level2, -level2sep, -level3, - -level3Sep) may be given. [config file: psLevel] - - -level1sep - Generate Level 1 separable PostScript. All colors are converted - to CMYK. Images are written with separate stream data for the - four components. [config file: psLevel] - - -level2 - Generate Level 2 PostScript. Level 2 supports color images and - image compression. This is the default setting. [config file: - psLevel] - - -level2sep - Generate Level 2 separable PostScript. All colors are converted - to CMYK. The PostScript separation convention operators are - used to handle custom (spot) colors. [config file: psLevel] - - -level3 - Generate Level 3 PostScript. This enables all Level 2 features - plus CID font embedding and masked image generation. [config - file: psLevel] - - -level3Sep - Generate Level 3 separable PostScript. The separation handling - is the same as for -level2Sep. [config file: psLevel] - - -eps Generate an Encapsulated PostScript (EPS) file. An EPS file - contains a single image, so if you use this option with a multi- - page PDF file, you must use -f and -l to specify a single page. - No more than one of the mode options (-eps, -form) may be given. - - -form Generate a PostScript form which can be imported by software - that understands forms. A form contains a single page, so if - you use this option with a multi-page PDF file, you must use -f - and -l to specify a single page. The -level1 option cannot be - used with -form. - - -opi Generate OPI comments for all images and forms which have OPI - information. (This option is only available if pdftops was com- - piled with OPI support.) [config file: psOPI] - - -noembt1 - By default, any Type 1 fonts which are embedded in the PDF file - are copied into the PostScript file. This option causes pdftops - to substitute base fonts instead. Embedded fonts make Post- - Script files larger, but may be necessary for readable output. - [config file: psEmbedType1Fonts] - - -noembtt - By default, any TrueType fonts which are embedded in the PDF - file are copied into the PostScript file. This option causes - pdftops to substitute base fonts instead. Embedded fonts make - PostScript files larger, but may be necessary for readable out- - put. Also, some PostScript interpreters do not have TrueType - rasterizers. [config file: psEmbedTrueTypeFonts] - - -noembcidps - By default, any CID PostScript fonts which are embedded in the - PDF file are copied into the PostScript file. This option dis- - ables that embedding. No attempt is made to substitute for non- - embedded CID PostScript fonts. [config file: psEmbedCID- - PostScriptFonts] - - -noembcidtt - By default, any CID TrueType fonts which are embedded in the PDF - file are copied into the PostScript file. This option disables - that embedding. No attempt is made to substitute for non-embed- - ded CID TrueType fonts. [config file: psEmbedCIDTrueTypeFonts] - - -preload - Convert PDF forms to PS procedures, and preload image data. - This uses more memory in the PostScript interpreter, but gener- - ates significantly smaller PS files in situations where, e.g., - the same image is drawn on every page of a long document. - - -paper size - Set the paper size to one of "letter", "legal", "A4", or "A3". - This can also be set to "match", which will set the paper size - to match the size specified in the PDF file. [config file: - psPaperSize] - - -paperw size - Set the paper width, in points. [config file: psPaperSize] - - -paperh size - Set the paper height, in points. [config file: psPaperSize] - - -nocrop - By default, output is cropped to the CropBox specified in the - PDF file. This option disables cropping. [config file: psCrop] - - -expand - Expand PDF pages smaller than the paper to fill the paper. By - default, these pages are not scaled. [config file: psExpandS- - maller] - - -noshrink - Don't scale PDF pages which are larger than the paper. By - default, pages larger than the paper are shrunk to fit. [config - file: psShrinkLarger] - - -nocenter - By default, PDF pages smaller than the paper (after any scaling) - are centered on the paper. This option causes them to be - aligned to the lower-left corner of the paper instead. [config - file: psCenter] - - -pagecrop - Treat the CropBox as the PDF page size. By default, the Media- - Box is used as the page size. - - -duplex - Set the Duplex pagedevice entry in the PostScript file. This - tells duplex-capable printers to enable duplexing. [config - file: psDuplex] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The pdftops software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - -SEE ALSO - xpdf(1), pdftotext(1), pdfinfo(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 pdftops(1) diff --git a/thirdparty/xpdf/3.02/src/doc/pdftops.hlp b/thirdparty/xpdf/3.02/src/doc/pdftops.hlp deleted file mode 100644 index 6e1a2b73..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftops.hlp +++ /dev/null @@ -1,211 +0,0 @@ -! Generated automatically by mantohlp -1 pdftops - - pdftops - Portable Document Format (PDF) to PostScript converter - - pdftops [options] [PDF-file [PS-file]] - - Pdftops converts Portable Document Format (PDF) files to PostScript so - they can be printed. - - Pdftops reads the PDF file, PDF-file, and writes a PostScript file, PS- - file. If PS-file is not specified, pdftops converts file.pdf to - file.ps (or file.eps with the -eps option). If PS-file is '-', the - PostScript is sent to stdout. - - () - -2 ONFIGURATION_FIL - - Pdftops reads a configuration file at startup. It first tries to find - the user's private config file, ~/.xpdfrc. If that doesn't exist, it - looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdftops is built). See the - xpdfrc(5) man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to print. - - -l number - Specifies the last page to print. - - -level1 - Generate Level 1 PostScript. The resulting PostScript files - will be significantly larger (if they contain images), but will - print on Level 1 printers. This also converts all images to - black and white. No more than one of the PostScript level - options (-level1, -level1sep, -level2, -level2sep, -level3, - -level3Sep) may be given. [config file: psLevel] - - -level1sep - Generate Level 1 separable PostScript. All colors are converted - to CMYK. Images are written with separate stream data for the - four components. [config file: psLevel] - - -level2 - Generate Level 2 PostScript. Level 2 supports color images and - image compression. This is the default setting. [config file: - psLevel] - - -level2sep - Generate Level 2 separable PostScript. All colors are converted - to CMYK. The PostScript separation convention operators are - used to handle custom (spot) colors. [config file: psLevel] - - -level3 - Generate Level 3 PostScript. This enables all Level 2 features - plus CID font embedding and masked image generation. [config - file: psLevel] - - -level3Sep - Generate Level 3 separable PostScript. The separation handling - is the same as for -level2Sep. [config file: psLevel] - - -eps Generate an Encapsulated PostScript (EPS) file. An EPS file - contains a single image, so if you use this option with a multi- - page PDF file, you must use -f and -l to specify a single page. - No more than one of the mode options (-eps, -form) may be given. - - -form Generate a PostScript form which can be imported by software - that understands forms. A form contains a single page, so if - you use this option with a multi-page PDF file, you must use -f - and -l to specify a single page. The -level1 option cannot be - used with -form. - - -opi Generate OPI comments for all images and forms which have OPI - information. (This option is only available if pdftops was com- - piled with OPI support.) [config file: psOPI] - - -noembt1 - By default, any Type 1 fonts which are embedded in the PDF file - are copied into the PostScript file. This option causes pdftops - to substitute base fonts instead. Embedded fonts make Post- - Script files larger, but may be necessary for readable output. - [config file: psEmbedType1Fonts] - - -noembtt - By default, any TrueType fonts which are embedded in the PDF - file are copied into the PostScript file. This option causes - pdftops to substitute base fonts instead. Embedded fonts make - PostScript files larger, but may be necessary for readable out- - put. Also, some PostScript interpreters do not have TrueType - rasterizers. [config file: psEmbedTrueTypeFonts] - - -noembcidps - By default, any CID PostScript fonts which are embedded in the - PDF file are copied into the PostScript file. This option dis- - ables that embedding. No attempt is made to substitute for non- - embedded CID PostScript fonts. [config file: psEmbedCID- - PostScriptFonts] - - -noembcidtt - By default, any CID TrueType fonts which are embedded in the PDF - file are copied into the PostScript file. This option disables - that embedding. No attempt is made to substitute for non-embed- - ded CID TrueType fonts. [config file: psEmbedCIDTrueTypeFonts] - - -preload - Convert PDF forms to PS procedures, and preload image data. - This uses more memory in the PostScript interpreter, but gener- - ates significantly smaller PS files in situations where, e.g., - the same image is drawn on every page of a long document. - - -paper size - Set the paper size to one of "letter", "legal", "A4", or "A3". - This can also be set to "match", which will set the paper size - to match the size specified in the PDF file. [config file: - psPaperSize] - - -paperw size - Set the paper width, in points. [config file: psPaperSize] - - -paperh size - Set the paper height, in points. [config file: psPaperSize] - - -nocrop - By default, output is cropped to the CropBox specified in the - PDF file. This option disables cropping. [config file: psCrop] - - -expand - Expand PDF pages smaller than the paper to fill the paper. By - default, these pages are not scaled. [config file: psExpandS- - maller] - - -noshrink - Don't scale PDF pages which are larger than the paper. By - default, pages larger than the paper are shrunk to fit. [config - file: psShrinkLarger] - - -nocenter - By default, PDF pages smaller than the paper (after any scaling) - are centered on the paper. This option causes them to be - aligned to the lower-left corner of the paper instead. [config - file: psCenter] - - -pagecrop - Treat the CropBox as the PDF page size. By default, the Media- - Box is used as the page size. - - -duplex - Set the Duplex pagedevice entry in the PostScript file. This - tells duplex-capable printers to enable duplexing. [config - file: psDuplex] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The pdftops software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftotext(1), pdfinfo(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/pdftotext.1 b/thirdparty/xpdf/3.02/src/doc/pdftotext.1 deleted file mode 100644 index 735908eb..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftotext.1 +++ /dev/null @@ -1,141 +0,0 @@ -.\" Copyright 1997-2007 Glyph & Cog, LLC -.TH pdftotext 1 "27 Febuary 2007" -.SH NAME -pdftotext \- Portable Document Format (PDF) to text converter -(version 3.02) -.SH SYNOPSIS -.B pdftotext -[options] -.RI [ PDF-file -.RI [ text-file ]] -.SH DESCRIPTION -.B Pdftotext -converts Portable Document Format (PDF) files to plain text. -.PP -Pdftotext reads the PDF file, -.IR PDF-file , -and writes a text file, -.IR text-file . -If -.I text-file -is not specified, pdftotext converts -.I file.pdf -to -.IR file.txt . -If -.I text-file -is \'-', the text is sent to stdout. -.SH CONFIGURATION FILE -Pdftotext reads a configuration file at startup. It first tries to -find the user's private config file, ~/.xpdfrc. If that doesn't -exist, it looks for a system-wide config file, typically -/usr/local/etc/xpdfrc (but this location can be changed when pdftotext -is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands. These are listed in square brackets with the description of -the corresponding command line option. -.TP -.BI \-f " number" -Specifies the first page to convert. -.TP -.BI \-l " number" -Specifies the last page to convert. -.TP -.B \-layout -Maintain (as best as possible) the original physical layout of the -text. The default is to \'undo' physical layout (columns, -hyphenation, etc.) and output the text in reading order. -.TP -.BI \-fixed " number" -Assume fixed-pitch (or tabular) text, with the specified character -width (in points). This forces physical layout mode. -.TP -.B \-raw -Keep the text in content stream order. This is a hack which often -"undoes" column formatting, etc. Use of raw mode is no longer -recommended. -.TP -.B \-htmlmeta -Generate a simple HTML file, including the meta information. This -simply wraps the text in

 and 
and prepends the meta -headers. -.TP -.BI \-enc " encoding-name" -Sets the encoding to use for text output. The -.I encoding\-name -must be defined with the unicodeMap command (see -.BR xpdfrc (5)). -The encoding name is case-sensitive. This defaults to "Latin1" (which -is a built-in encoding). -.RB "[config file: " textEncoding ] -.TP -.BI \-eol " unix | dos | mac" -Sets the end-of-line convention to use for text output. -.RB "[config file: " textEOL ] -.TP -.B \-nopgbrk -Don't insert page breaks (form feed characters) between pages. -.RB "[config file: " textPageBreaks ] -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.B \-q -Don't print any messages or errors. -.RB "[config file: " errQuiet ] -.TP -.BI \-cfg " config-file" -Read -.I config-file -in place of ~/.xpdfrc or the system-wide config file. -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.SH BUGS -Some PDF files contain fonts whose encodings have been mangled beyond -recognition. There is no way (short of OCR) to extract text from -these files. -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The pdftotext software and documentation are copyright 1996-2007 Glyph -& Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftops (1), -.BR pdfinfo (1), -.BR pdffonts (1), -.BR pdftoppm (1), -.BR pdfimages (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/pdftotext.cat b/thirdparty/xpdf/3.02/src/doc/pdftotext.cat deleted file mode 100644 index 75d5d423..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftotext.cat +++ /dev/null @@ -1,115 +0,0 @@ -pdftotext(1) pdftotext(1) - - - -NAME - pdftotext - Portable Document Format (PDF) to text converter (version - 3.02) - -SYNOPSIS - pdftotext [options] [PDF-file [text-file]] - -DESCRIPTION - Pdftotext converts Portable Document Format (PDF) files to plain text. - - Pdftotext reads the PDF file, PDF-file, and writes a text file, text- - file. If text-file is not specified, pdftotext converts file.pdf to - file.txt. If text-file is '-', the text is sent to stdout. - -CONFIGURATION FILE - Pdftotext reads a configuration file at startup. It first tries to - find the user's private config file, ~/.xpdfrc. If that doesn't exist, - it looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdftotext is built). See the - xpdfrc(5) man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to convert. - - -l number - Specifies the last page to convert. - - -layout - Maintain (as best as possible) the original physical layout of - the text. The default is to 'undo' physical layout (columns, - hyphenation, etc.) and output the text in reading order. - - -fixed number - Assume fixed-pitch (or tabular) text, with the specified charac- - ter width (in points). This forces physical layout mode. - - -raw Keep the text in content stream order. This is a hack which - often "undoes" column formatting, etc. Use of raw mode is no - longer recommended. - - -htmlmeta - Generate a simple HTML file, including the meta information. - This simply wraps the text in
 and 
and prepends the - meta headers. - - -enc encoding-name - Sets the encoding to use for text output. The encoding-name - must be defined with the unicodeMap command (see xpdfrc(5)). - The encoding name is case-sensitive. This defaults to "Latin1" - (which is a built-in encoding). [config file: textEncoding] - - -eol unix | dos | mac - Sets the end-of-line convention to use for text output. [config - file: textEOL] - - -nopgbrk - Don't insert page breaks (form feed characters) between pages. - [config file: textPageBreaks] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - -BUGS - Some PDF files contain fonts whose encodings have been mangled beyond - recognition. There is no way (short of OCR) to extract text from these - files. - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The pdftotext software and documentation are copyright 1996-2007 Glyph - & Cog, LLC. - -SEE ALSO - xpdf(1), pdftops(1), pdfinfo(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 Febuary 2007 pdftotext(1) diff --git a/thirdparty/xpdf/3.02/src/doc/pdftotext.hlp b/thirdparty/xpdf/3.02/src/doc/pdftotext.hlp deleted file mode 100644 index c60f3a6d..00000000 --- a/thirdparty/xpdf/3.02/src/doc/pdftotext.hlp +++ /dev/null @@ -1,127 +0,0 @@ -! Generated automatically by mantohlp -1 pdftotext - - pdftotext - Portable Document Format (PDF) to text converter - - pdftotext [options] [PDF-file [text-file]] - - Pdftotext converts Portable Document Format (PDF) files to plain text. - - Pdftotext reads the PDF file, PDF-file, and writes a text file, text- - file. If text-file is not specified, pdftotext converts file.pdf to - file.txt. If text-file is '-', the text is sent to stdout. - - () - -2 ONFIGURATION_FIL - - Pdftotext reads a configuration file at startup. It first tries to - find the user's private config file, ~/.xpdfrc. If that doesn't exist, - it looks for a system-wide config file, typically /usr/local/etc/xpdfrc - (but this location can be changed when pdftotext is built). See the - xpdfrc(5) man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands. These are listed in square brackets with the description of the - corresponding command line option. - - -f number - Specifies the first page to convert. - - -l number - Specifies the last page to convert. - - -layout - Maintain (as best as possible) the original physical layout of - the text. The default is to 'undo' physical layout (columns, - hyphenation, etc.) and output the text in reading order. - - -fixed number - Assume fixed-pitch (or tabular) text, with the specified charac- - ter width (in points). This forces physical layout mode. - - -raw Keep the text in content stream order. This is a hack which - often "undoes" column formatting, etc. Use of raw mode is no - longer recommended. - - -htmlmeta - Generate a simple HTML file, including the meta information. - This simply wraps the text in
 and 
and prepends the - meta headers. - - -enc encoding-name - Sets the encoding to use for text output. The encoding-name - must be defined with the unicodeMap command (see xpdfrc(5)). - The encoding name is case-sensitive. This defaults to "Latin1" - (which is a built-in encoding). [config file: textEncoding] - - -eol unix | dos | mac - Sets the end-of-line convention to use for text output. [config - file: textEOL] - - -nopgbrk - Don't insert page breaks (form feed characters) between pages. - [config file: textPageBreaks] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -q Don't print any messages or errors. [config file: errQuiet] - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - () - -2 BUGS - - Some PDF files contain fonts whose encodings have been mangled beyond - recognition. There is no way (short of OCR) to extract text from these - files. - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The pdftotext software and documentation are copyright 1996-2007 Glyph - & Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftops(1), pdfinfo(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/sample-xpdfrc b/thirdparty/xpdf/3.02/src/doc/sample-xpdfrc deleted file mode 100644 index 4736bd64..00000000 --- a/thirdparty/xpdf/3.02/src/doc/sample-xpdfrc +++ /dev/null @@ -1,92 +0,0 @@ -#======================================================================== -# -# Sample xpdfrc file -# -# The Xpdf tools look for a config file in two places: -# 1. ~/.xpdfrc -# 2. in a system-wide directory, typically /usr/local/etc/xpdfrc -# -# This sample config file demonstrates some of the more common -# configuration options. Everything here is commented out. You -# should edit things (especially the file/directory paths, since -# they'll likely be different on your system), and uncomment whichever -# options you want to use. For complete details on config file syntax -# and available options, please see the xpdfrc(5) man page. -# -# Also, the Xpdf language support packages each include a set of -# options to be added to the xpdfrc file. -# -# http://www.foolabs.com/xpdf/ -# -#======================================================================== - -#----- display fonts - -# These map the Base-14 fonts to the Type 1 fonts that ship with -# ghostscript. You'll almost certainly want to use something like -# this, but you'll need to adjust this to point to wherever -# ghostscript is installed on your system. (But if the fonts are -# installed in a "standard" location, xpdf will find them -# automatically.) - -#displayFontT1 Times-Roman /usr/local/share/ghostscript/fonts/n021003l.pfb -#displayFontT1 Times-Italic /usr/local/share/ghostscript/fonts/n021023l.pfb -#displayFontT1 Times-Bold /usr/local/share/ghostscript/fonts/n021004l.pfb -#displayFontT1 Times-BoldItalic /usr/local/share/ghostscript/fonts/n021024l.pfb -#displayFontT1 Helvetica /usr/local/share/ghostscript/fonts/n019003l.pfb -#displayFontT1 Helvetica-Oblique /usr/local/share/ghostscript/fonts/n019023l.pfb -#displayFontT1 Helvetica-Bold /usr/local/share/ghostscript/fonts/n019004l.pfb -#displayFontT1 Helvetica-BoldOblique /usr/local/share/ghostscript/fonts/n019024l.pfb -#displayFontT1 Courier /usr/local/share/ghostscript/fonts/n022003l.pfb -#displayFontT1 Courier-Oblique /usr/local/share/ghostscript/fonts/n022023l.pfb -#displayFontT1 Courier-Bold /usr/local/share/ghostscript/fonts/n022004l.pfb -#displayFontT1 Courier-BoldOblique /usr/local/share/ghostscript/fonts/n022024l.pfb -#displayFontT1 Symbol /usr/local/share/ghostscript/fonts/s050000l.pfb -#displayFontT1 ZapfDingbats /usr/local/share/ghostscript/fonts/d050000l.pfb - -# If you need to display PDF files that refer to non-embedded fonts, -# you should add one or more fontDir options to point to the -# directories containing the font files. Xpdf will only look at .pfa, -# .pfb, and .ttf files in those directories (other files will simply -# be ignored). - -#fontDir /usr/local/fonts/bakoma - -#----- PostScript output control - -# Set the default PostScript file or command. - -#psFile "|lpr -Pmyprinter" - -# Set the default PostScript paper size -- this can be letter, legal, -# A4, or A3. You can also specify a paper size as width and height -# (in points). - -#psPaperSize letter - -#----- text output control - -# Choose a text encoding for copy-and-paste and for pdftotext output. -# The Latin1, ASCII7, and UTF-8 encodings are built into Xpdf. Other -# encodings are available in the language support packages. - -#textEncoding UTF-8 - -# Choose the end-of-line convention for multi-line copy-and-past and -# for pdftotext output. The available options are unix, mac, and dos. - -#textEOL unix - -#----- misc settings - -# Enable t1lib, FreeType, and anti-aliased text. - -#enableT1lib yes -#enableFreeType yes -#antialias yes - -# Set the command used to run a web browser when a URL hyperlink is -# clicked. - -#launchCommand viewer-script -#urlCommand "netscape -remote 'openURL(%s)'" diff --git a/thirdparty/xpdf/3.02/src/doc/xpdf.1 b/thirdparty/xpdf/3.02/src/doc/xpdf.1 deleted file mode 100644 index 2ee6ce5a..00000000 --- a/thirdparty/xpdf/3.02/src/doc/xpdf.1 +++ /dev/null @@ -1,874 +0,0 @@ -.\" Copyright 1996-2007 Glyph & Cog, LLC -.TH xpdf 1 "27 February 2007" -.SH NAME -xpdf \- Portable Document Format (PDF) file viewer for X (version 3.02) -.SH SYNOPSIS -.B xpdf -[options] -.RI [ PDF-file -.RI [ page " | +" dest ]] -.SH DESCRIPTION -.B Xpdf -is a viewer for Portable Document Format (PDF) files. (These are also -sometimes also called \'Acrobat' files, from the name of Adobe's PDF -software.) Xpdf runs under the X Window System on UNIX, VMS, and -OS/2. -.PP -To run xpdf, simply type: -.PP -.RS -xpdf file.pdf -.RE -.PP -where -.I file.pdf -is your PDF file. The file name can be followed by a number -specifying the page which should be displayed first, e.g.: -.PP -.RS -xpdf file.pdf 18 -.RE -.PP -You can also give a named destination, prefixed with \'+' in place of -the page number. (This is only useful with PDF files that provide -named destination targets.) -.PP -You can also start xpdf without opening any files: -.PP -.RS -xpdf -.RE -.SH CONFIGURATION FILE -Xpdf reads a configuration file at startup. It first tries to find -the user's private config file, ~/.xpdfrc. If that doesn't exist, it -looks for a system-wide config file, typically /usr/local/etc/xpdfrc -(but this location can be changed when xpdf is built). See the -.BR xpdfrc (5) -man page for details. -.SH OPTIONS -Many of the following options can be set with configuration file -commands or X resources. These are listed in square brackets with the -description of the corresponding command line option. -.TP -.BI \-g " geometry" -Set the initial window geometry. -.RB ( \-geometry -is equivalent.) -.RB "[X resource: " xpdf.geometry ] -.TP -.BI \-title " title" -Set the window title. By default, the title will be "xpdf: foo.pdf". -.RB "[X resource: " xpdf.title ] -.TP -.B \-cmap -Install a private colormap. This is ignored on TrueColor visuals. -.RB "[X resource: " xpdf.installCmap ] -.TP -.BI \-rgb " number" -Set the size of largest RGB cube xpdf will try to allocate. The -default is 5 (for a 5x5x5 cube); set to a smaller number to conserve -color table entries. This is ignored with private colormaps and on -TrueColor visuals. -.RB "[X resource: " xpdf.rgbCubeSize ] -.TP -.B \-rv -Set reverse video mode. This reverses the colors of everything except -images. It may not always produce great results for PDF files which -do weird things with color. This also causes the paper color to -default to black. -.RB "[X resource: " xpdf.reverseVideo ] -.TP -.BI \-papercolor " color" -Set the "paper color", i.e., the background of the page display. This -will not work too well with PDF files that do things like filling in -white behind the text. -.RB "[X resource: " xpdf.paperColor ] -.TP -.BI \-mattecolor " color" -Set the matte color, i.e., the color used for background outside the -actual page area. (There is a separate setting, -xpdf.fullScreenMatteColor, for full-screen mode.) -.RB "[X resource: " xpdf.matteColor ] -.TP -.BI \-z " zoom" -Set the initial zoom factor. A number specifies a zoom percentage, -where 100 means 72 dpi.You may also specify \'page', to fit the page -to the window size, or \'width', to fit the page width to the window -width. -.RB "[config file: " initialZoom "; or X resource: " xpdf.initialZoom ] -.TP -.B \-cont -Start in continuous view mode, i.e., with one vertical scroll bar for -the whole document. -.RB "[config file: " continuousView ] -.TP -.BI \-t1lib " yes | no" -Enable or disable t1lib (a Type 1 font rasterizer). This defaults to -"yes". -.RB "[config file: " enableT1lib ] -.TP -.BI \-freetype " yes | no" -Enable or disable FreeType (a TrueType / Type 1 font rasterizer). -This defaults to "yes". -.RB "[config file: " enableFreeType ] -.TP -.BI \-aa " yes | no" -Enable or disable font anti-aliasing. This defaults to "yes". -.RB "[config file: " antialias ] -.TP -.BI \-aaVector " yes | no" -Enable or disable vector anti-aliasing. This defaults to "yes". -.RB "[config file: " vectorAntialias ] -.TP -.BI \-ps " PS-file" -Set the default file name for PostScript output (i.e., the name which -will appear in the print dialog). This can also be of the form -\'|command' to pipe the PostScript through a command. -.RB "[config file: " psFile ] -.TP -.BI \-paper " size" -Set the paper size to one of "letter", "legal", "A4", or "A3". This -can also be set to "match", which will set the paper size to match the -size specified in the PDF file. -.RB "[config file: " psPaperSize ] -.TP -.BI \-paperw " size" -Set the paper width, in points. -.RB "[config file: " psPaperSize ] -.TP -.BI \-paperh " size" -Set the paper height, in points. -.RB "[config file: " psPaperSize ] -.TP -.B \-level1 -Generate Level 1 PostScript. The resulting PostScript files will be -significantly larger (if they contain images), but will print on Level -1 printers. This also converts all images to black and white. -.RB "[config file: " psLevel ] -.TP -.BI \-enc " encoding-name" -Sets the encoding to use for text output. The -.I encoding\-name -must be defined with the unicodeMap command (see -.BR xpdfrc (5)). -This defaults to "Latin1" (which is a built-in encoding). -.RB "[config file: " textEncoding ] -.TP -.BI \-eol " unix | dos | mac" -Sets the end-of-line convention to use for text output. -.RB "[config file: " textEOL ] -.TP -.BI \-opw " password" -Specify the owner password for the PDF file. Providing this will -bypass all security restrictions. -.TP -.BI \-upw " password" -Specify the user password for the PDF file. -.TP -.B \-fullscreen -Open xpdf in full-screen mode, useful for presentations. -.TP -.BI \-remote " name" -Start/contact xpdf remote server with specified name (see the -.B "REMOTE SERVER MODE" -section below). -.TP -.BI \-exec " command" -Execute a command (see the -.B COMMANDS -section below) in an xpdf remote server window (with -remote only). -.TP -.B \-reload -Reload xpdf remote server window (with -remote only). -.TP -.B \-raise -Raise xpdf remote server window (with -remote only). -.TP -.B \-quit -Kill xpdf remote server (with -remote only). -.TP -.B \-cmd -Print commands as they're executed (useful for debugging). -.RB "[config file: " printCommands ] -.TP -.B \-q -Don't print any messages or errors. -.RB "[config file: " errQuiet ] -.TP -.BI \-cfg " config-file" -Read -.I config-file -in place of ~/.xpdfrc or the system-wide config file. -.TP -.B \-v -Print copyright and version information. -.TP -.B \-h -Print usage information. -.RB ( \-help -and -.B \-\-help -are equivalent.) -.PP -Several other standard X options and resources will work as expected: -.TP -.BI \-display " display" -.RB "[X resource: " xpdf.display ] -.TP -.BI \-fg " color" -.RB ( \-foreground -is equivalent.) -.RB "[X resource: " xpdf*Foreground ] -.TP -.BI \-bg " color" -.RB ( \-background -is equivalent.) -.RB "[X resource: " xpdf*Background ] -.TP -.BI \-font " font" -.RB ( \-fn -is equivalent.) -.RB "[X resource: " xpdf*fontList ] -.PP -The color and font options only affect the user interface elements, -not the PDF display (the \'paper'). -.PP -The following X resources do not have command line option equivalents: -.TP -.B xpdf.toolTipEnable -Enables (if set to true) or disables (if set to false) the tool-tips -on the toolbar buttons. -.TP -.B xpdf.fullScreenMatteColor -Sets the matte color to be used in full-screen mode. The default -setting is "black". -.SH CONTROLS -.SS On-screen controls, at the bottom of the xpdf window -.TP -.B "left/right arrow buttons" -Move to the previous/next page. -.TP -.B "double left/right arrow buttons" -Move backward or forward by ten pages. -.TP -.B "dashed left/right arrow buttons" -Move backward or forward along the history path. -.TP -.B "\'Page' entry box" -Move to a specific page number. Click in the box to activate it, type -the page number, then hit return. -.TP -.B "zoom popup menu" -Change the zoom factor (see the description of the -z option above). -.TP -.B "binoculars button" -Find a text string. -.TP -.B "print button" -Bring up a dialog for generating a PostScript file. The dialog has -options to set the pages to be printed and the PostScript file name. -The file name can be \'-' for stdout or \'|command' to pipe the -PostScript through a command, e.g., \'|lpr'. -.TP -.B "\'?' button" -Bring up the \'about xpdf' window. -.TP -.B "link info" -The space between the \'?' and \'Quit' buttons is used to show the URL -or external file name when the mouse is over a link. -.TP -.B "\'Quit' button" -Quit xpdf. -.PP -.SS Menu -Pressing the right mouse button will post a popup menu with the -following commands: -.TP -.B "Open..." -Open a new PDF file via a file requester. -.TP -.B "Open in new window..." -Create a new window and open a new PDF file via a file requester. -.TP -.B "Reload" -Reload the current PDF file. Note that Xpdf will reload the file -automatically (on a page change or redraw) if it has changed since it -was last loaded. -.TP -.B "Save as..." -Save the current file via a file requester. -.TP -.B "Continuous view" -Toggles between single page and continuous view modes. -.TP -.B "Rotate counterclockwise" -Rotate the page 90 degrees counterclockwise. -.TP -.B "Rotate clockwise" -Rotate the page 90 degrees clockwise. The two rotate commands are -intended primarily for PDF files where the rotation isn't correctly -specified in the file. -.TP -.B "Zoom to selection" -Zoom in to the currently selected rectangle. -.TP -.B "Close" -Close the current window. If this is the only open window, the -document is closed, but the window is left open (i.e., this menu -command won't quit xpdf). -.TP -.B "Quit" -Quit xpdf. -.PP -.SS Outline -If the PDF contains an outline (a.k.a., bookmarks), there will be an -outline pane on the left side of the window. The width of the outline -pane is adjustable with a vertical split bar via the knob near its -bottom end. -.PP -.SS Text selection -Dragging the mouse with the left button held down will highlight an -arbitrary rectangle. Any text inside this rectangle will be copied to -the X selection buffer. -.PP -.SS Links -Clicking on a hyperlink will jump to the link's destination. A link -to another PDF document will make xpdf load that document. A -\'launch' link to an executable program will display a dialog, and if -you click \'ok', execute the program. URL links call an external -command (see the -.B WEB BROWSERS -section below). -.PP -.SS Panning -Dragging the mouse with the middle button held down pans the window. -.PP -.SS Key bindings -.TP -.B o -Open a new PDF file via a file requester. -.TP -.B r -Reload the current PDF file. Note that Xpdf will reload the file -automatically (on a page change or redraw) if it has changed since it -was last loaded. -.TP -.B control-L -Redraw the current page. -.TP -.B control-W -Close the current window. -.TP -.B f or control-F -Find a text string. -.TP -.B control-G -Find next occurrence. -.TP -.B control-P -Print. -.TP -.B n -Move to the next page. Scrolls to the top of the page, unless scroll -lock is turned on. -.TP -.B p -Move to the previous page. Scrolls to the top of the page, unless -scroll lock is turned on. -.TP -.BR " or " " or " -Scroll down on the current page; if already at bottom, move to next -page. -.TP -.BR " or " " or " " or " -Scroll up on the current page; if already at top, move to previous -page. -.TP -.B v -Move forward along the history path. -.TP -.B b -Move backward along the history path. -.TP -.B -Scroll to top of current page. -.TP -.B -Scroll to bottom of current page. -.TP -.B control- -Scroll to first page of document. -.TP -.B control- -Scroll to last page of document. -.TP -.B arrows -Scroll the current page. -.TP -.B g -Activate the page number text field ("goto page"). -.TP -.B 0 -Set the zoom factor to 125%. -.TP -.B + -Zoom in (increment the zoom factor by 1). -.TP -.B - -Zoom out (decrement the zoom factor by 1). -.TP -.B z -Set the zoom factor to 'page' (fit page to window). -.TP -.B w -Set the zoom factor to 'width' (fit page width to window). -.TP -.B alt-F -Toggle full-screen mode. -.TP -.B q -Quit xpdf. -.SH "WEB BROWSERS" -If you want to run xpdf automatically from netscape or mosaic (and -probably other browsers) when you click on a link to a PDF file, you -need to edit (or create) the files -.I .mime.types -and -.I .mailcap -in your home directory. In -.I .mime.types -add the line: -.PP -.RS -application/pdf pdf -.RE -.PP -In -.I .mailcap -add the lines: -.PP -.RS -# Use xpdf to view PDF files. -.RE -.RS -application/pdf; xpdf -q %s -.RE -.PP -Make sure that xpdf is on your executable search path. -.PP -When you click on a URL link in a PDF file, xpdf will execute the -command specified by the urlCommand config file option, replacing an -occurrence of \'%s' with the URL. For example, to call netscape with -the URL, add this line to your config file: -.PP -.RS -urlCommand "netscape -remote 'openURL(%s)'" -.RE -.SH COMMANDS -Xpdf's key and mouse bindings are user-configurable, using the bind and -unbind options in the config file (see -.BR xpdfrc (5)). -The bind command allows you to bind a key or mouse button to a -sequence of one or more commands. -.SS Available Commands -The following commands are supported: -.TP -.BI gotoPage( page ) -Go to the specified page. -.TP -.BI gotoPageNoScroll( page ) -Go to the specified page, with the current relative scroll position. -.TP -.BI gotoDest( dest ) -Go to a named destination. -.TP -.B gotoLastPage -Go to the last page in the PDF file. -.TP -.B gotoLastPageNoScroll -Go to the last page in the PDF file, with the current relative scroll -position. -.TP -.B nextPage -Go to the next page. -.TP -.B nextPageNoScroll -Go to the next page, with the current relative scroll position. -.TP -.B prevPage -Go to the previous page. -.TP -.B prevPageNoScroll -Go to the previous page, with the current relative scroll position. -.TP -.B pageUp -Scroll up by one screenful. -.TP -.B pageDown -Scroll down by one screenful. -.TP -.BI scrollLeft( n ) -Scroll left by -.I n -pixels. -.TP -.BI scrollRight( n ) -Scroll right by -.I n -pixels. -.TP -.BI scrollUp( n ) -Scroll up by -.I n -pixels. -.TP -.BI scrollDown( n ) -Scroll down by -.I n -pixels. -.TP -.BI scrollUpPrevPage( n ) -Scroll up by -.I n -pixels, moving to the previous page if appropriate. -.TP -.BI scrollDownPrevPage( n ) -Scroll down by -.I n -pixels, moving to the next page if appropriate. -.TP -.B scrollToTopEdge -Scroll to the top edge of the current page, with no horizontal -movement. -.TP -.B scrollToBottomEdge -Scroll to the bottom edge of the current page, with no horizontal -movement. -.TP -.B scrollToLeftEdge -Scroll to the left edge of the current page, with no vertical -movement. -.TP -.B scrollToRightEdge -Scroll to the right edge of the current page, with no vertical -movement. -.TP -.B scrollToTopLeft -Scroll to the top-left corner of the current page. -.TP -.B scrollToBottomRight -Scroll to the bottom-right corner of the current page. -.TP -.B goForward -Move forward along the history path. -.TP -.B goBackward -Move backward along the history path. -.TP -.BI zoomPercent( z ) -Set the zoom factor to -.IR z %. -.TP -.B zoomFitPage -Set the zoom factor to fit-page. -.TP -.B zoomFitWidth -Set the zoom factor to fit-width. -.TP -.B zoomIn -Zoom in - go to the next higher zoom factor. -.TP -.B zoomOut -Zoom out - go the next lower zoom factor. -.TP -.B rotateCW -Rotate the page 90 degrees clockwise. -.TP -.B rotateCCW -Rotate the page 90 degrees counterclockwise. -.TP -.BI setSelection( pg , ulx , uly , lrx , lry ) -Set the selection to the specified coordinates on the specified page. -.TP -.B continuousMode -Go to continuous view mode. -.TP -.B singlePageMode -Go to single-page view mode. -.TP -.B toggleContinuousMode -Toggle between continuous and single page view modes. -.TP -.B fullScreenMode -Go to full-screen mode. -.TP -.B windowMode -Go to window (non-full-screen) mode. -.TP -.B toggleFullScreenMode -Toggle between full-screen and window modes. -.TP -.B open -Open a PDF file in this window, using the open dialog. -.TP -.B openInNewWin -Open a PDF file in a new window, using the open dialog. -.TP -.BI openFile( file ) -Open a specified PDF file in this window. -.TP -.BI openFileInNewWin( file ) -Open a specified PDF file in a new window. -.TP -.BI openFileAtDest( file , dest ) -Open a specified PDF file in this window and go to a named -destination. -.TP -.BI openFileAtDestInNewWin( file , dest ) -Open a specified PDF file in a new window and go to a named -destination. -.TP -.B reload -Reload the current PDF file. -.TP -.B redraw -Redraw the window. -.TP -.B raise -Raise the window to the front. -.TP -.B closeWindow -Close the window. -.TP -.BI run( external-command-string ) -Run an external command. The following escapes are allowed in the -command string: -.nf - - %f => PDF file name (or an empty string if no - file is open) - %b => PDF file base name, i.e., file name minus - the extension (or an empty string if no - file is open) - %u => link URL (or an empty string if not over - a URL link) - %p => current page number (or an empty string if - no file is open) - %x => selection upper-left x coordinate - (or 0 if there is no selection) - %y => selection upper-left y coordinate - (or 0 if there is no selection) - %X => selection lower-right x coordinate - (or 0 if there is no selection) - %Y => selection lower-right y coordinate - (or 0 if there is no selection) - %% => % - -.fi -.TP -.B openOutline -Open the outline pane. -.TP -.B closeOutline -Close the outline pane. -.TP -.B toggleOutline -Toggle the outline pane between open and closed. -.TP -.BI scrollOutlineDown( n ) -Scroll the outline down by -.I n -increments. -.TP -.BI scrollOutlineUp( n ) -Scroll the outline up by -.I n -increments. -.TP -.B focusToDocWin -Set the keyboard focus to the main document window. -.TP -.B focusToPageNum -Set the keyboard focus to the page number text box. -.TP -.B find -Open the 'find' dialog. -.TP -.B findNext -Finds the next occurrence of the search string (no dialog). -.TP -.B print -Open the 'print' dialog. -.TP -.B about -Open the 'about' dialog. -.TP -.B quit -Quit from xpdf. -.PP -The following commands depend on the current mouse position: -.TP -.B startSelection -Start a selection, which will be extended as the mouse moves. -.TP -.B endSelection -End a selection. -.TP -.B startPan -Start a pan, which will scroll the document as the mouse moves -.TP -.B endPan -End a pan. -.TP -.B postPopupMenu -Display the popup menu. -.TP -.B followLink -Follow a hyperlink (does nothing if the mouse is not over a link). -.TP -.B followLinkInNewWin -Follow a hyperlink, opening PDF files in a new window (does nothing if -the mouse is not over a link). For links to non-PDF files, this -command is identical to followLink. -.TP -.B followLinkNoSel -Same as followLink, but does nothing if there is a non-empty selection. -(This is useful as a mouse button binding.) -.TP -.B followLinkInNewWinNoSel -Same as followLinkInNewWin, but does nothing if there is a non-empty -selection. (This is useful as a mouse button binding.) -.SS Default Bindings -The default mouse bindings are as follows: -.nf - - bind mousePress1 any startSelection - bind mouseRelease1 any endSelection followLinkNoSel - bind mousePress2 any startPan - bind mouseRelease2 any endPan - bind mousePress3 any postPopupMenu - bind mousePress4 any scrollUpPrevPage(16) - bind mousePress5 any scrollDownNextPage(16) - bind mousePress6 any scrollLeft(16) - bind mousePress7 any scrollRight(16) - -.fi -The default key bindings are as follows: -.nf - - bind ctrl-home any gotoPage(1) - bind home any scrollToTopLeft - bind ctrl-end any gotoLastPage - bind end any scrollToBottomRight - bind pgup any pageUp - bind backspace any pageUp - bind delete any pageUp - bind pgdn any pageDown - bind space any pageDown - bind left any scrollLeft(16) - bind right any scrollRight(16) - bind up any scrollUp(16) - bind down any scrollDown(16) - bind o any open - bind O any open - bind r any reload - bind R any reload - bind f any find - bind F any find - bind ctrl-f any find - bind ctrl-g any findNext - bind ctrl-p any print - bind n scrLockOff nextPage - bind N scrLockOff nextPage - bind n scrLockOn nextPageNoScroll - bind N scrLockOn nextPageNoScroll - bind p scrLockOff prevPage - bind P scrLockOff prevPage - bind p scrLockOn prevPageNoScroll - bind P scrLockOn prevPageNoScroll - bind v any goForward - bind b any goBackward - bind g any focusToPageNum - bind 0 any zoomPercent(125) - bind + any zoomIn - bind - any zoomOut - bind z any zoomFitPage - bind w any zoomFitWidth - bind alt-f any toggleFullScreenMode - bind ctrl-l any redraw - bind ctrl-w any closeWindow - bind ? any about - bind q any quit - bind Q any quit - -.fi -Previous versions of xpdf included a "viKeys" X resource. It is no -longer available, but the following bindings are equivalent: -.nf - - bind h any scrollLeft(16) - bind l any scrollRight(16) - bind k any scrollUp(16) - bind j any scrollDown(16) - -.fi -.SH "REMOTE SERVER MODE" -Xpdf can be started in remote server mode by specifying a server name -(in addition to the file name and page number). For example: -.PP -.RS -xpdf -remote myServer file.pdf -.RE -.PP -If there is currently no xpdf running in server mode with the name -\'myServer', a new xpdf window will be opened. If another command: -.PP -.RS -xpdf -remote myServer another.pdf 9 -.RE -.PP -is issued, a new copy of xpdf will not be started. Instead, the first -xpdf (the server) will load -.I another.pdf -and display page nine. If the file name is the same: -.PP -.RS -xpdf -remote myServer another.pdf 4 -.RE -.PP -the xpdf server will simply display the specified page. -.PP -The -raise option tells the server to raise its window; it can be -specified with or without a file name and page number. -.PP -The -quit option tells the server to close its window and exit. -.SH EXIT CODES -The Xpdf tools use the following exit codes: -.TP -0 -No error. -.TP -1 -Error opening a PDF file. -.TP -2 -Error opening an output file. -.TP -3 -Error related to PDF permissions. -.TP -99 -Other error. -.SH AUTHOR -The xpdf software and documentation are copyright 1996-2007 Glyph & -Cog, LLC. -.SH "SEE ALSO" -.BR pdftops (1), -.BR pdftotext (1), -.BR pdfinfo (1), -.BR pdffonts (1), -.BR pdftoppm (1), -.BR pdfimages (1), -.BR xpdfrc (5) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/xpdf.cat b/thirdparty/xpdf/3.02/src/doc/xpdf.cat deleted file mode 100644 index cb21373f..00000000 --- a/thirdparty/xpdf/3.02/src/doc/xpdf.cat +++ /dev/null @@ -1,765 +0,0 @@ -xpdf(1) xpdf(1) - - - -NAME - xpdf - Portable Document Format (PDF) file viewer for X (version 3.02) - -SYNOPSIS - xpdf [options] [PDF-file [page | +dest]] - -DESCRIPTION - Xpdf is a viewer for Portable Document Format (PDF) files. (These are - also sometimes also called 'Acrobat' files, from the name of Adobe's - PDF software.) Xpdf runs under the X Window System on UNIX, VMS, and - OS/2. - - To run xpdf, simply type: - - xpdf file.pdf - - where file.pdf is your PDF file. The file name can be followed by a - number specifying the page which should be displayed first, e.g.: - - xpdf file.pdf 18 - - You can also give a named destination, prefixed with '+' in place of - the page number. (This is only useful with PDF files that provide - named destination targets.) - - You can also start xpdf without opening any files: - - xpdf - -CONFIGURATION FILE - Xpdf reads a configuration file at startup. It first tries to find the - user's private config file, ~/.xpdfrc. If that doesn't exist, it looks - for a system-wide config file, typically /usr/local/etc/xpdfrc (but - this location can be changed when xpdf is built). See the xpdfrc(5) - man page for details. - -OPTIONS - Many of the following options can be set with configuration file com- - mands or X resources. These are listed in square brackets with the - description of the corresponding command line option. - - -g geometry - Set the initial window geometry. (-geometry is equivalent.) [X - resource: xpdf.geometry] - - -title title - Set the window title. By default, the title will be "xpdf: - foo.pdf". [X resource: xpdf.title] - - -cmap Install a private colormap. This is ignored on TrueColor visu- - als. [X resource: xpdf.installCmap] - - -rgb number - Set the size of largest RGB cube xpdf will try to allocate. The - default is 5 (for a 5x5x5 cube); set to a smaller number to con- - serve color table entries. This is ignored with private col- - ormaps and on TrueColor visuals. [X resource: xpdf.rgbCubeSize] - - -rv Set reverse video mode. This reverses the colors of everything - except images. It may not always produce great results for PDF - files which do weird things with color. This also causes the - paper color to default to black. [X resource: xpdf.reverseV- - ideo] - - -papercolor color - Set the "paper color", i.e., the background of the page display. - This will not work too well with PDF files that do things like - filling in white behind the text. [X resource: xpdf.paperColor] - - -mattecolor color - Set the matte color, i.e., the color used for background outside - the actual page area. (There is a separate setting, - xpdf.fullScreenMatteColor, for full-screen mode.) [X resource: - xpdf.matteColor] - - -z zoom - Set the initial zoom factor. A number specifies a zoom percent- - age, where 100 means 72 dpi.You may also specify 'page', to fit - the page to the window size, or 'width', to fit the page width - to the window width. [config file: initialZoom; or X resource: - xpdf.initialZoom] - - -cont Start in continuous view mode, i.e., with one vertical scroll - bar for the whole document. [config file: continuousView] - - -t1lib yes | no - Enable or disable t1lib (a Type 1 font rasterizer). This - defaults to "yes". [config file: enableT1lib] - - -freetype yes | no - Enable or disable FreeType (a TrueType / Type 1 font raster- - izer). This defaults to "yes". [config file: enableFreeType] - - -aa yes | no - Enable or disable font anti-aliasing. This defaults to "yes". - [config file: antialias] - - -aaVector yes | no - Enable or disable vector anti-aliasing. This defaults to "yes". - [config file: vectorAntialias] - - -ps PS-file - Set the default file name for PostScript output (i.e., the name - which will appear in the print dialog). This can also be of the - form '|command' to pipe the PostScript through a command. [con- - fig file: psFile] - - -paper size - Set the paper size to one of "letter", "legal", "A4", or "A3". - This can also be set to "match", which will set the paper size - to match the size specified in the PDF file. [config file: - psPaperSize] - - -paperw size - Set the paper width, in points. [config file: psPaperSize] - - -paperh size - Set the paper height, in points. [config file: psPaperSize] - - -level1 - Generate Level 1 PostScript. The resulting PostScript files - will be significantly larger (if they contain images), but will - print on Level 1 printers. This also converts all images to - black and white. [config file: psLevel] - - -enc encoding-name - Sets the encoding to use for text output. The encoding-name - must be defined with the unicodeMap command (see xpdfrc(5)). - This defaults to "Latin1" (which is a built-in encoding). [con- - fig file: textEncoding] - - -eol unix | dos | mac - Sets the end-of-line convention to use for text output. [config - file: textEOL] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -fullscreen - Open xpdf in full-screen mode, useful for presentations. - - -remote name - Start/contact xpdf remote server with specified name (see the - REMOTE SERVER MODE section below). - - -exec command - Execute a command (see the COMMANDS section below) in an xpdf - remote server window (with -remote only). - - -reload - Reload xpdf remote server window (with -remote only). - - -raise Raise xpdf remote server window (with -remote only). - - -quit Kill xpdf remote server (with -remote only). - - -cmd Print commands as they're executed (useful for debugging). - [config file: printCommands] - - -q Don't print any messages or errors. [config file: errQuiet] - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - Several other standard X options and resources will work as expected: - - -display display - [X resource: xpdf.display] - - -fg color - (-foreground is equivalent.) [X resource: xpdf*Foreground] - - -bg color - (-background is equivalent.) [X resource: xpdf*Background] - - -font font - (-fn is equivalent.) [X resource: xpdf*fontList] - - The color and font options only affect the user interface elements, not - the PDF display (the 'paper'). - - The following X resources do not have command line option equivalents: - - xpdf.toolTipEnable - Enables (if set to true) or disables (if set to false) the tool- - tips on the toolbar buttons. - - xpdf.fullScreenMatteColor - Sets the matte color to be used in full-screen mode. The - default setting is "black". - -CONTROLS - On-screen controls, at the bottom of the xpdf window - left/right arrow buttons - Move to the previous/next page. - - double left/right arrow buttons - Move backward or forward by ten pages. - - dashed left/right arrow buttons - Move backward or forward along the history path. - - 'Page' entry box - Move to a specific page number. Click in the box to activate - it, type the page number, then hit return. - - zoom popup menu - Change the zoom factor (see the description of the -z option - above). - - binoculars button - Find a text string. - - print button - Bring up a dialog for generating a PostScript file. The dialog - has options to set the pages to be printed and the PostScript - file name. The file name can be '-' for stdout or '|command' to - pipe the PostScript through a command, e.g., '|lpr'. - - '?' button - Bring up the 'about xpdf' window. - - link info - The space between the '?' and 'Quit' buttons is used to show the - URL or external file name when the mouse is over a link. - - 'Quit' button - Quit xpdf. - - - Menu - Pressing the right mouse button will post a popup menu with the follow- - ing commands: - - Open... - Open a new PDF file via a file requester. - - Open in new window... - Create a new window and open a new PDF file via a file - requester. - - Reload Reload the current PDF file. Note that Xpdf will reload the - file automatically (on a page change or redraw) if it has - changed since it was last loaded. - - Save as... - Save the current file via a file requester. - - Continuous view - Toggles between single page and continuous view modes. - - Rotate counterclockwise - Rotate the page 90 degrees counterclockwise. - - Rotate clockwise - Rotate the page 90 degrees clockwise. The two rotate commands - are intended primarily for PDF files where the rotation isn't - correctly specified in the file. - - Zoom to selection - Zoom in to the currently selected rectangle. - - Close Close the current window. If this is the only open window, the - document is closed, but the window is left open (i.e., this menu - command won't quit xpdf). - - Quit Quit xpdf. - - - Outline - If the PDF contains an outline (a.k.a., bookmarks), there will be an - outline pane on the left side of the window. The width of the outline - pane is adjustable with a vertical split bar via the knob near its bot- - tom end. - - - Text selection - Dragging the mouse with the left button held down will highlight an - arbitrary rectangle. Any text inside this rectangle will be copied to - the X selection buffer. - - - Links - Clicking on a hyperlink will jump to the link's destination. A link to - another PDF document will make xpdf load that document. A 'launch' - link to an executable program will display a dialog, and if you click - 'ok', execute the program. URL links call an external command (see the - WEB BROWSERS section below). - - - Panning - Dragging the mouse with the middle button held down pans the window. - - - Key bindings - o Open a new PDF file via a file requester. - - r Reload the current PDF file. Note that Xpdf will reload the - file automatically (on a page change or redraw) if it has - changed since it was last loaded. - - control-L - Redraw the current page. - - control-W - Close the current window. - - f or control-F - Find a text string. - - control-G - Find next occurrence. - - control-P - Print. - - n Move to the next page. Scrolls to the top of the page, unless - scroll lock is turned on. - - p Move to the previous page. Scrolls to the top of the page, - unless scroll lock is turned on. - - or or - Scroll down on the current page; if already at bottom, move to - next page. - - or or or - Scroll up on the current page; if already at top, move to previ- - ous page. - - v Move forward along the history path. - - b Move backward along the history path. - - Scroll to top of current page. - - Scroll to bottom of current page. - - control- - Scroll to first page of document. - - control- - Scroll to last page of document. - - arrows Scroll the current page. - - g Activate the page number text field ("goto page"). - - 0 Set the zoom factor to 125%. - - + Zoom in (increment the zoom factor by 1). - - - Zoom out (decrement the zoom factor by 1). - - z Set the zoom factor to 'page' (fit page to window). - - w Set the zoom factor to 'width' (fit page width to window). - - alt-F Toggle full-screen mode. - - q Quit xpdf. - -WEB BROWSERS - If you want to run xpdf automatically from netscape or mosaic (and - probably other browsers) when you click on a link to a PDF file, you - need to edit (or create) the files .mime.types and .mailcap in your - home directory. In .mime.types add the line: - - application/pdf pdf - - In .mailcap add the lines: - - # Use xpdf to view PDF files. - application/pdf; xpdf -q %s - - Make sure that xpdf is on your executable search path. - - When you click on a URL link in a PDF file, xpdf will execute the com- - mand specified by the urlCommand config file option, replacing an - occurrence of '%s' with the URL. For example, to call netscape with - the URL, add this line to your config file: - - urlCommand "netscape -remote 'openURL(%s)'" - -COMMANDS - Xpdf's key and mouse bindings are user-configurable, using the bind and - unbind options in the config file (see xpdfrc(5)). The bind command - allows you to bind a key or mouse button to a sequence of one or more - commands. - - Available Commands - The following commands are supported: - - gotoPage(page) - Go to the specified page. - - gotoPageNoScroll(page) - Go to the specified page, with the current relative scroll posi- - tion. - - gotoDest(dest) - Go to a named destination. - - gotoLastPage - Go to the last page in the PDF file. - - gotoLastPageNoScroll - Go to the last page in the PDF file, with the current relative - scroll position. - - nextPage - Go to the next page. - - nextPageNoScroll - Go to the next page, with the current relative scroll position. - - prevPage - Go to the previous page. - - prevPageNoScroll - Go to the previous page, with the current relative scroll posi- - tion. - - pageUp Scroll up by one screenful. - - pageDown - Scroll down by one screenful. - - scrollLeft(n) - Scroll left by n pixels. - - scrollRight(n) - Scroll right by n pixels. - - scrollUp(n) - Scroll up by n pixels. - - scrollDown(n) - Scroll down by n pixels. - - scrollUpPrevPage(n) - Scroll up by n pixels, moving to the previous page if appropri- - ate. - - scrollDownPrevPage(n) - Scroll down by n pixels, moving to the next page if appropriate. - - scrollToTopEdge - Scroll to the top edge of the current page, with no horizontal - movement. - - scrollToBottomEdge - Scroll to the bottom edge of the current page, with no horizon- - tal movement. - - scrollToLeftEdge - Scroll to the left edge of the current page, with no vertical - movement. - - scrollToRightEdge - Scroll to the right edge of the current page, with no vertical - movement. - - scrollToTopLeft - Scroll to the top-left corner of the current page. - - scrollToBottomRight - Scroll to the bottom-right corner of the current page. - - goForward - Move forward along the history path. - - goBackward - Move backward along the history path. - - zoomPercent(z) - Set the zoom factor to z%. - - zoomFitPage - Set the zoom factor to fit-page. - - zoomFitWidth - Set the zoom factor to fit-width. - - zoomIn Zoom in - go to the next higher zoom factor. - - zoomOut - Zoom out - go the next lower zoom factor. - - rotateCW - Rotate the page 90 degrees clockwise. - - rotateCCW - Rotate the page 90 degrees counterclockwise. - - setSelection(pg,ulx,uly,lrx,lry) - Set the selection to the specified coordinates on the specified - page. - - continuousMode - Go to continuous view mode. - - singlePageMode - Go to single-page view mode. - - toggleContinuousMode - Toggle between continuous and single page view modes. - - fullScreenMode - Go to full-screen mode. - - windowMode - Go to window (non-full-screen) mode. - - toggleFullScreenMode - Toggle between full-screen and window modes. - - open Open a PDF file in this window, using the open dialog. - - openInNewWin - Open a PDF file in a new window, using the open dialog. - - openFile(file) - Open a specified PDF file in this window. - - openFileInNewWin(file) - Open a specified PDF file in a new window. - - openFileAtDest(file,dest) - Open a specified PDF file in this window and go to a named des- - tination. - - openFileAtDestInNewWin(file,dest) - Open a specified PDF file in a new window and go to a named des- - tination. - - reload Reload the current PDF file. - - redraw Redraw the window. - - raise Raise the window to the front. - - closeWindow - Close the window. - - run(external-command-string) - Run an external command. The following escapes are allowed in - the command string: - - %f => PDF file name (or an empty string if no - file is open) - %b => PDF file base name, i.e., file name minus - the extension (or an empty string if no - file is open) - %u => link URL (or an empty string if not over - a URL link) - %p => current page number (or an empty string if - no file is open) - %x => selection upper-left x coordinate - (or 0 if there is no selection) - %y => selection upper-left y coordinate - (or 0 if there is no selection) - %X => selection lower-right x coordinate - (or 0 if there is no selection) - %Y => selection lower-right y coordinate - (or 0 if there is no selection) - %% => % - - - openOutline - Open the outline pane. - - closeOutline - Close the outline pane. - - toggleOutline - Toggle the outline pane between open and closed. - - scrollOutlineDown(n) - Scroll the outline down by n increments. - - scrollOutlineUp(n) - Scroll the outline up by n increments. - - focusToDocWin - Set the keyboard focus to the main document window. - - focusToPageNum - Set the keyboard focus to the page number text box. - - find Open the 'find' dialog. - - findNext - Finds the next occurrence of the search string (no dialog). - - print Open the 'print' dialog. - - about Open the 'about' dialog. - - quit Quit from xpdf. - - The following commands depend on the current mouse position: - - startSelection - Start a selection, which will be extended as the mouse moves. - - endSelection - End a selection. - - startPan - Start a pan, which will scroll the document as the mouse moves - - endPan End a pan. - - postPopupMenu - Display the popup menu. - - followLink - Follow a hyperlink (does nothing if the mouse is not over a - link). - - followLinkInNewWin - Follow a hyperlink, opening PDF files in a new window (does - nothing if the mouse is not over a link). For links to non-PDF - files, this command is identical to followLink. - - followLinkNoSel - Same as followLink, but does nothing if there is a non-empty - selection. (This is useful as a mouse button binding.) - - followLinkInNewWinNoSel - Same as followLinkInNewWin, but does nothing if there is a non- - empty selection. (This is useful as a mouse button binding.) - - Default Bindings - The default mouse bindings are as follows: - - bind mousePress1 any startSelection - bind mouseRelease1 any endSelection followLinkNoSel - bind mousePress2 any startPan - bind mouseRelease2 any endPan - bind mousePress3 any postPopupMenu - bind mousePress4 any scrollUpPrevPage(16) - bind mousePress5 any scrollDownNextPage(16) - bind mousePress6 any scrollLeft(16) - bind mousePress7 any scrollRight(16) - - The default key bindings are as follows: - - bind ctrl-home any gotoPage(1) - bind home any scrollToTopLeft - bind ctrl-end any gotoLastPage - bind end any scrollToBottomRight - bind pgup any pageUp - bind backspace any pageUp - bind delete any pageUp - bind pgdn any pageDown - bind space any pageDown - bind left any scrollLeft(16) - bind right any scrollRight(16) - bind up any scrollUp(16) - bind down any scrollDown(16) - bind o any open - bind O any open - bind r any reload - bind R any reload - bind f any find - bind F any find - bind ctrl-f any find - bind ctrl-g any findNext - bind ctrl-p any print - bind n scrLockOff nextPage - bind N scrLockOff nextPage - bind n scrLockOn nextPageNoScroll - bind N scrLockOn nextPageNoScroll - bind p scrLockOff prevPage - bind P scrLockOff prevPage - bind p scrLockOn prevPageNoScroll - bind P scrLockOn prevPageNoScroll - bind v any goForward - bind b any goBackward - bind g any focusToPageNum - bind 0 any zoomPercent(125) - bind + any zoomIn - bind - any zoomOut - bind z any zoomFitPage - bind w any zoomFitWidth - bind alt-f any toggleFullScreenMode - bind ctrl-l any redraw - bind ctrl-w any closeWindow - bind ? any about - bind q any quit - bind Q any quit - - Previous versions of xpdf included a "viKeys" X resource. It is no - longer available, but the following bindings are equivalent: - - bind h any scrollLeft(16) - bind l any scrollRight(16) - bind k any scrollUp(16) - bind j any scrollDown(16) - - -REMOTE SERVER MODE - Xpdf can be started in remote server mode by specifying a server name - (in addition to the file name and page number). For example: - - xpdf -remote myServer file.pdf - - If there is currently no xpdf running in server mode with the name - 'myServer', a new xpdf window will be opened. If another command: - - xpdf -remote myServer another.pdf 9 - - is issued, a new copy of xpdf will not be started. Instead, the first - xpdf (the server) will load another.pdf and display page nine. If the - file name is the same: - - xpdf -remote myServer another.pdf 4 - - the xpdf server will simply display the specified page. - - The -raise option tells the server to raise its window; it can be spec- - ified with or without a file name and page number. - - The -quit option tells the server to close its window and exit. - -EXIT CODES - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - -AUTHOR - The xpdf software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - -SEE ALSO - pdftops(1), pdftotext(1), pdfinfo(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 xpdf(1) diff --git a/thirdparty/xpdf/3.02/src/doc/xpdf.hlp b/thirdparty/xpdf/3.02/src/doc/xpdf.hlp deleted file mode 100644 index 20ae1c79..00000000 --- a/thirdparty/xpdf/3.02/src/doc/xpdf.hlp +++ /dev/null @@ -1,779 +0,0 @@ -! Generated automatically by mantohlp -1 xpdf - - xpdf - Portable Document Format (PDF) file viewer for X (version 3.02) - - xpdf [options] [PDF-file [page | +dest]] - - Xpdf is a viewer for Portable Document Format (PDF) files. (These are - also sometimes also called 'Acrobat' files, from the name of Adobe's - PDF software.) Xpdf runs under the X Window System on UNIX, VMS, and - OS/2. - - To run xpdf, simply type: - - xpdf file.pdf - - where file.pdf is your PDF file. The file name can be followed by a - number specifying the page which should be displayed first, e.g.: - - xpdf file.pdf 18 - - You can also give a named destination, prefixed with '+' in place of - the page number. (This is only useful with PDF files that provide - named destination targets.) - - You can also start xpdf without opening any files: - - xpdf - - () - -2 ONFIGURATION_FIL - - Xpdf reads a configuration file at startup. It first tries to find the - user's private config file, ~/.xpdfrc. If that doesn't exist, it looks - for a system-wide config file, typically /usr/local/etc/xpdfrc (but - this location can be changed when xpdf is built). See the xpdfrc(5) - man page for details. - - () - -2 OPTIONS - - Many of the following options can be set with configuration file com- - mands or X resources. These are listed in square brackets with the - description of the corresponding command line option. - - -g geometry - Set the initial window geometry. (-geometry is equivalent.) [X - resource: xpdf.geometry] - - -title title - Set the window title. By default, the title will be "xpdf: - foo.pdf". [X resource: xpdf.title] - - -cmap Install a private colormap. This is ignored on TrueColor visu- - als. [X resource: xpdf.installCmap] - - -rgb number - Set the size of largest RGB cube xpdf will try to allocate. The - default is 5 (for a 5x5x5 cube); set to a smaller number to con- - serve color table entries. This is ignored with private col- - ormaps and on TrueColor visuals. [X resource: xpdf.rgbCubeSize] - - -rv Set reverse video mode. This reverses the colors of everything - except images. It may not always produce great results for PDF - files which do weird things with color. This also causes the - paper color to default to black. [X resource: xpdf.reverseV- - ideo] - - -papercolor color - Set the "paper color", i.e., the background of the page display. - This will not work too well with PDF files that do things like - filling in white behind the text. [X resource: xpdf.paperColor] - - -mattecolor color - Set the matte color, i.e., the color used for background outside - the actual page area. (There is a separate setting, - xpdf.fullScreenMatteColor, for full-screen mode.) [X resource: - xpdf.matteColor] - - -z zoom - Set the initial zoom factor. A number specifies a zoom percent- - age, where 100 means 72 dpi.You may also specify 'page', to fit - the page to the window size, or 'width', to fit the page width - to the window width. [config file: initialZoom; or X resource: - xpdf.initialZoom] - - -cont Start in continuous view mode, i.e., with one vertical scroll - bar for the whole document. [config file: continuousView] - - -t1lib yes | no - Enable or disable t1lib (a Type 1 font rasterizer). This - defaults to "yes". [config file: enableT1lib] - - -freetype yes | no - Enable or disable FreeType (a TrueType / Type 1 font raster- - izer). This defaults to "yes". [config file: enableFreeType] - - -aa yes | no - Enable or disable font anti-aliasing. This defaults to "yes". - [config file: antialias] - - -aaVector yes | no - Enable or disable vector anti-aliasing. This defaults to "yes". - [config file: vectorAntialias] - - -ps PS-file - Set the default file name for PostScript output (i.e., the name - which will appear in the print dialog). This can also be of the - form '|command' to pipe the PostScript through a command. [con- - fig file: psFile] - - -paper size - Set the paper size to one of "letter", "legal", "A4", or "A3". - This can also be set to "match", which will set the paper size - to match the size specified in the PDF file. [config file: - psPaperSize] - - -paperw size - Set the paper width, in points. [config file: psPaperSize] - - -paperh size - Set the paper height, in points. [config file: psPaperSize] - - -level1 - Generate Level 1 PostScript. The resulting PostScript files - will be significantly larger (if they contain images), but will - print on Level 1 printers. This also converts all images to - black and white. [config file: psLevel] - - -enc encoding-name - Sets the encoding to use for text output. The encoding-name - must be defined with the unicodeMap command (see xpdfrc(5)). - This defaults to "Latin1" (which is a built-in encoding). [con- - fig file: textEncoding] - - -eol unix | dos | mac - Sets the end-of-line convention to use for text output. [config - file: textEOL] - - -opw password - Specify the owner password for the PDF file. Providing this - will bypass all security restrictions. - - -upw password - Specify the user password for the PDF file. - - -fullscreen - Open xpdf in full-screen mode, useful for presentations. - - -remote name - Start/contact xpdf remote server with specified name (see the - REMOTE SERVER MODE section below). - - -exec command - Execute a command (see the COMMANDS section below) in an xpdf - remote server window (with -remote only). - - -reload - Reload xpdf remote server window (with -remote only). - - -raise Raise xpdf remote server window (with -remote only). - - -quit Kill xpdf remote server (with -remote only). - - -cmd Print commands as they're executed (useful for debugging). - [config file: printCommands] - - -q Don't print any messages or errors. [config file: errQuiet] - - -cfg config-file - Read config-file in place of ~/.xpdfrc or the system-wide config - file. - - -v Print copyright and version information. - - -h Print usage information. (-help and --help are equivalent.) - - Several other standard X options and resources will work as expected: - - -display display - [X resource: xpdf.display] - - -fg color - (-foreground is equivalent.) [X resource: xpdf*Foreground] - - -bg color - (-background is equivalent.) [X resource: xpdf*Background] - - -font font - (-fn is equivalent.) [X resource: xpdf*fontList] - - The color and font options only affect the user interface elements, not - the PDF display (the 'paper'). - - The following X resources do not have command line option equivalents: - - xpdf.toolTipEnable - Enables (if set to true) or disables (if set to false) the tool- - tips on the toolbar buttons. - - xpdf.fullScreenMatteColor - Sets the matte color to be used in full-screen mode. The - default setting is "black". - - () - -2 CONTROLS - - On-screen controls, at the bottom of the xpdf window - left/right arrow buttons - Move to the previous/next page. - - double left/right arrow buttons - Move backward or forward by ten pages. - - dashed left/right arrow buttons - Move backward or forward along the history path. - - 'Page' entry box - Move to a specific page number. Click in the box to activate - it, type the page number, then hit return. - - zoom popup menu - Change the zoom factor (see the description of the -z option - above). - - binoculars button - Find a text string. - - print button - Bring up a dialog for generating a PostScript file. The dialog - has options to set the pages to be printed and the PostScript - file name. The file name can be '-' for stdout or '|command' to - pipe the PostScript through a command, e.g., '|lpr'. - - '?' button - Bring up the 'about xpdf' window. - - link info - The space between the '?' and 'Quit' buttons is used to show the - URL or external file name when the mouse is over a link. - - 'Quit' button - Quit xpdf. - - Menu - Pressing the right mouse button will post a popup menu with the follow- - ing commands: - - Open... - Open a new PDF file via a file requester. - - Open in new window... - Create a new window and open a new PDF file via a file - requester. - - Reload Reload the current PDF file. Note that Xpdf will reload the - file automatically (on a page change or redraw) if it has - changed since it was last loaded. - - Save as... - Save the current file via a file requester. - - Continuous view - Toggles between single page and continuous view modes. - - Rotate counterclockwise - Rotate the page 90 degrees counterclockwise. - - Rotate clockwise - Rotate the page 90 degrees clockwise. The two rotate commands - are intended primarily for PDF files where the rotation isn't - correctly specified in the file. - - Zoom to selection - Zoom in to the currently selected rectangle. - - Close Close the current window. If this is the only open window, the - document is closed, but the window is left open (i.e., this menu - command won't quit xpdf). - - Quit Quit xpdf. - - Outline - If the PDF contains an outline (a.k.a., bookmarks), there will be an - outline pane on the left side of the window. The width of the outline - pane is adjustable with a vertical split bar via the knob near its bot- - tom end. - - Text selection - Dragging the mouse with the left button held down will highlight an - arbitrary rectangle. Any text inside this rectangle will be copied to - the X selection buffer. - - Links - Clicking on a hyperlink will jump to the link's destination. A link to - another PDF document will make xpdf load that document. A 'launch' - link to an executable program will display a dialog, and if you click - 'ok', execute the program. URL links call an external command (see the - WEB BROWSERS section below). - - Panning - Dragging the mouse with the middle button held down pans the window. - - Key bindings - o Open a new PDF file via a file requester. - - r Reload the current PDF file. Note that Xpdf will reload the - file automatically (on a page change or redraw) if it has - changed since it was last loaded. - - control-L - Redraw the current page. - - control-W - Close the current window. - - f or control-F - Find a text string. - - control-G - Find next occurrence. - - control-P - Print. - - n Move to the next page. Scrolls to the top of the page, unless - scroll lock is turned on. - - p Move to the previous page. Scrolls to the top of the page, - unless scroll lock is turned on. - - or or - Scroll down on the current page; if already at bottom, move to - next page. - - or or or - Scroll up on the current page; if already at top, move to previ- - ous page. - - v Move forward along the history path. - - b Move backward along the history path. - - Scroll to top of current page. - - Scroll to bottom of current page. - - control- - Scroll to first page of document. - - control- - Scroll to last page of document. - - arrows Scroll the current page. - - g Activate the page number text field ("goto page"). - - 0 Set the zoom factor to 125%. - - + Zoom in (increment the zoom factor by 1). - - - Zoom out (decrement the zoom factor by 1). - - z Set the zoom factor to 'page' (fit page to window). - - w Set the zoom factor to 'width' (fit page width to window). - - alt-F Toggle full-screen mode. - - q Quit xpdf. - - () - -2 WEB_BROWSERS - - If you want to run xpdf automatically from netscape or mosaic (and - probably other browsers) when you click on a link to a PDF file, you - need to edit (or create) the files .mime.types and .mailcap in your - home directory. In .mime.types add the line: - - application/pdf pdf - - In .mailcap add the lines: - - # Use xpdf to view PDF files. - application/pdf; xpdf -q %s - - Make sure that xpdf is on your executable search path. - - When you click on a URL link in a PDF file, xpdf will execute the com- - mand specified by the urlCommand config file option, replacing an - occurrence of '%s' with the URL. For example, to call netscape with - the URL, add this line to your config file: - - urlCommand "netscape -remote 'openURL(%s)'" - - () - -2 COMMANDS - - Xpdf's key and mouse bindings are user-configurable, using the bind and - unbind options in the config file (see xpdfrc(5)). The bind command - allows you to bind a key or mouse button to a sequence of one or more - commands. - - Available Commands - The following commands are supported: - - gotoPage(page) - Go to the specified page. - - gotoPageNoScroll(page) - Go to the specified page, with the current relative scroll posi- - tion. - - gotoDest(dest) - Go to a named destination. - - gotoLastPage - Go to the last page in the PDF file. - - gotoLastPageNoScroll - Go to the last page in the PDF file, with the current relative - scroll position. - - nextPage - Go to the next page. - - nextPageNoScroll - Go to the next page, with the current relative scroll position. - - prevPage - Go to the previous page. - - prevPageNoScroll - Go to the previous page, with the current relative scroll posi- - tion. - - pageUp Scroll up by one screenful. - - pageDown - Scroll down by one screenful. - - scrollLeft(n) - Scroll left by n pixels. - - scrollRight(n) - Scroll right by n pixels. - - scrollUp(n) - Scroll up by n pixels. - - scrollDown(n) - Scroll down by n pixels. - - scrollUpPrevPage(n) - Scroll up by n pixels, moving to the previous page if appropri- - ate. - - scrollDownPrevPage(n) - Scroll down by n pixels, moving to the next page if appropriate. - - scrollToTopEdge - Scroll to the top edge of the current page, with no horizontal - movement. - - scrollToBottomEdge - Scroll to the bottom edge of the current page, with no horizon- - tal movement. - - scrollToLeftEdge - Scroll to the left edge of the current page, with no vertical - movement. - - scrollToRightEdge - Scroll to the right edge of the current page, with no vertical - movement. - - scrollToTopLeft - Scroll to the top-left corner of the current page. - - scrollToBottomRight - Scroll to the bottom-right corner of the current page. - - goForward - Move forward along the history path. - - goBackward - Move backward along the history path. - - zoomPercent(z) - Set the zoom factor to z%. - - zoomFitPage - Set the zoom factor to fit-page. - - zoomFitWidth - Set the zoom factor to fit-width. - - zoomIn Zoom in - go to the next higher zoom factor. - - zoomOut - Zoom out - go the next lower zoom factor. - - rotateCW - Rotate the page 90 degrees clockwise. - - rotateCCW - Rotate the page 90 degrees counterclockwise. - - setSelection(pg,ulx,uly,lrx,lry) - Set the selection to the specified coordinates on the specified - page. - - continuousMode - Go to continuous view mode. - - singlePageMode - Go to single-page view mode. - - toggleContinuousMode - Toggle between continuous and single page view modes. - - fullScreenMode - Go to full-screen mode. - - windowMode - Go to window (non-full-screen) mode. - - toggleFullScreenMode - Toggle between full-screen and window modes. - - open Open a PDF file in this window, using the open dialog. - - openInNewWin - Open a PDF file in a new window, using the open dialog. - - openFile(file) - Open a specified PDF file in this window. - - openFileInNewWin(file) - Open a specified PDF file in a new window. - - openFileAtDest(file,dest) - Open a specified PDF file in this window and go to a named des- - tination. - - openFileAtDestInNewWin(file,dest) - Open a specified PDF file in a new window and go to a named des- - tination. - - reload Reload the current PDF file. - - redraw Redraw the window. - - raise Raise the window to the front. - - closeWindow - Close the window. - - run(external-command-string) - Run an external command. The following escapes are allowed in - the command string: - - %f => PDF file name (or an empty string if no - file is open) - %b => PDF file base name, i.e., file name minus - the extension (or an empty string if no - file is open) - %u => link URL (or an empty string if not over - a URL link) - %p => current page number (or an empty string if - no file is open) - %x => selection upper-left x coordinate - (or 0 if there is no selection) - %y => selection upper-left y coordinate - (or 0 if there is no selection) - %X => selection lower-right x coordinate - (or 0 if there is no selection) - %Y => selection lower-right y coordinate - (or 0 if there is no selection) - %% => % - - openOutline - Open the outline pane. - - closeOutline - Close the outline pane. - - toggleOutline - Toggle the outline pane between open and closed. - - scrollOutlineDown(n) - Scroll the outline down by n increments. - - scrollOutlineUp(n) - Scroll the outline up by n increments. - - focusToDocWin - Set the keyboard focus to the main document window. - - focusToPageNum - Set the keyboard focus to the page number text box. - - find Open the 'find' dialog. - - findNext - Finds the next occurrence of the search string (no dialog). - - print Open the 'print' dialog. - - about Open the 'about' dialog. - - quit Quit from xpdf. - - The following commands depend on the current mouse position: - - startSelection - Start a selection, which will be extended as the mouse moves. - - endSelection - End a selection. - - startPan - Start a pan, which will scroll the document as the mouse moves - - endPan End a pan. - - postPopupMenu - Display the popup menu. - - followLink - Follow a hyperlink (does nothing if the mouse is not over a - link). - - followLinkInNewWin - Follow a hyperlink, opening PDF files in a new window (does - nothing if the mouse is not over a link). For links to non-PDF - files, this command is identical to followLink. - - followLinkNoSel - Same as followLink, but does nothing if there is a non-empty - selection. (This is useful as a mouse button binding.) - - followLinkInNewWinNoSel - Same as followLinkInNewWin, but does nothing if there is a non- - empty selection. (This is useful as a mouse button binding.) - - Default Bindings - The default mouse bindings are as follows: - - bind mousePress1 any startSelection - bind mouseRelease1 any endSelection followLinkNoSel - bind mousePress2 any startPan - bind mouseRelease2 any endPan - bind mousePress3 any postPopupMenu - bind mousePress4 any scrollUpPrevPage(16) - bind mousePress5 any scrollDownNextPage(16) - bind mousePress6 any scrollLeft(16) - bind mousePress7 any scrollRight(16) - - The default key bindings are as follows: - - bind ctrl-home any gotoPage(1) - bind home any scrollToTopLeft - bind ctrl-end any gotoLastPage - bind end any scrollToBottomRight - bind pgup any pageUp - bind backspace any pageUp - bind delete any pageUp - bind pgdn any pageDown - bind space any pageDown - bind left any scrollLeft(16) - bind right any scrollRight(16) - bind up any scrollUp(16) - bind down any scrollDown(16) - bind o any open - bind O any open - bind r any reload - bind R any reload - bind f any find - bind F any find - bind ctrl-f any find - bind ctrl-g any findNext - bind ctrl-p any print - bind n scrLockOff nextPage - bind N scrLockOff nextPage - bind n scrLockOn nextPageNoScroll - bind N scrLockOn nextPageNoScroll - bind p scrLockOff prevPage - bind P scrLockOff prevPage - bind p scrLockOn prevPageNoScroll - bind P scrLockOn prevPageNoScroll - bind v any goForward - bind b any goBackward - bind g any focusToPageNum - bind 0 any zoomPercent(125) - bind + any zoomIn - bind - any zoomOut - bind z any zoomFitPage - bind w any zoomFitWidth - bind alt-f any toggleFullScreenMode - bind ctrl-l any redraw - bind ctrl-w any closeWindow - bind ? any about - bind q any quit - bind Q any quit - - Previous versions of xpdf included a "viKeys" X resource. It is no - longer available, but the following bindings are equivalent: - - bind h any scrollLeft(16) - bind l any scrollRight(16) - bind k any scrollUp(16) - bind j any scrollDown(16) - - () - -2 REMOTE_SERVER_MODE - - Xpdf can be started in remote server mode by specifying a server name - (in addition to the file name and page number). For example: - - xpdf -remote myServer file.pdf - - If there is currently no xpdf running in server mode with the name - 'myServer', a new xpdf window will be opened. If another command: - - xpdf -remote myServer another.pdf 9 - - is issued, a new copy of xpdf will not be started. Instead, the first - xpdf (the server) will load another.pdf and display page nine. If the - file name is the same: - - xpdf -remote myServer another.pdf 4 - - the xpdf server will simply display the specified page. - - The -raise option tells the server to raise its window; it can be spec- - ified with or without a file name and page number. - - The -quit option tells the server to close its window and exit. - - () - -2 XIT_CODE - - The Xpdf tools use the following exit codes: - - 0 No error. - - 1 Error opening a PDF file. - - 2 Error opening an output file. - - 3 Error related to PDF permissions. - - 99 Other error. - - () - -2 AUTHOR - - The xpdf software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - - () - -2 SEE_ALSO - - pdftops(1), pdftotext(1), pdfinfo(1), pdffonts(1), pdftoppm(1), pdfim- - ages(1), xpdfrc(5) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/doc/xpdfrc.5 b/thirdparty/xpdf/3.02/src/doc/xpdfrc.5 deleted file mode 100644 index 0f795dd1..00000000 --- a/thirdparty/xpdf/3.02/src/doc/xpdfrc.5 +++ /dev/null @@ -1,662 +0,0 @@ -.\" Copyright 2002-2007 Glyph & Cog, LLC -.TH xpdfrc 5 "27 February 2007" -.SH NAME -xpdfrc \- configuration file for Xpdf tools (version 3.02) -.SH DESCRIPTION -All of the Xpdf tools read a single configuration file. If you have a -.I .xpdfrc -file in your home directory, it will be read. Otherwise, a -system-wide configuration file will be read from -.IR /usr/local/etc/xpdfrc , -if it exists. (This is its default location; depending on build -options, it may be placed elsewhere.) On Win32 systems, the -.I xpdfrc -file should be placed in the same directory as the executables. -.PP -The xpdfrc file consists of a series of configuration options, one -per line. Blank lines and lines starting with a \'#' (comments) are -ignored. -.PP -The following sections list all of the configuration options, sorted -into functional groups. There is an examples section at the end. -.SH INCLUDE FILES -.TP -.BI include " config\-file" -Includes the specified config file. The effect of this is equivalent -to inserting the contents of -.I config\-file -directly into the parent config file in place of the -.I include -command. Config files can be nested arbitrarily deeply. -.SH CHARACTER MAPPING -.TP -.BI nameToUnicode " map\-file" -Specifies a file with the mapping from character names to Unicode. -This is used to handle PDF fonts that have valid encodings but no -ToUnicode entry. Each line of a nameToUnicode file looks like this: - -.I " " hex\-string name - -The -.I hex\-string -is the Unicode (UCS-2) character index, and -.I name -is the corresponding character name. Multiple nameToUnicode files can -be used; if a character name is given more than once, the code in the -last specified file is used. There is a built-in default -nameToUnicode table with all of Adobe's standard character names. -.TP -.BI cidToUnicode " registry\-ordering map\-file" -Specifies the file with the mapping from character collection to -Unicode. Each line of a cidToUnicode file represents one character: - -.I " " hex\-string - -The -.I hex\-string -is the Unicode (UCS-2) index for that character. The first line maps -CID 0, the second line CID 1, etc. File size is determined by size of -the character collection. Only one file is allowed per character -collection; the last specified file is used. There are no built-in -cidToUnicode mappings. -.TP -.BI unicodeToUnicode " font\-name\-substring map\-file" -This is used to work around PDF fonts which have incorrect Unicode -information. It specifies a file which maps from the given -(incorrect) Unicode indexes to the correct ones. The mapping will be -used for any font whose name contains -.IR font\-name\-substring . -Each line of a unicodeToUnicode file represents one Unicode character: - -.RI " " in\-hex " " out\-hex1 " " out\-hex2 " ..." - -The -.I in\-hex -field is an input (incorrect) Unicode index, and the rest of the -fields are one or more output (correct) Unicode indexes. Each -occurrence of -.I in\-hex -will be converted to the specified output sequence. -.TP -.BI unicodeMap " encoding\-name map\-file" -Specifies the file with mapping from Unicode to -.IR encoding\-name . -These encodings are used for X display fonts and text output (see -below). Each line of a unicodeMap file represents a range of one or -more Unicode characters which maps linearly to a range in the output -encoding: -.nf - -.I " " in\-start\-hex in\-end\-hex out\-start\-hex - -.fi -Entries for single characters can be abbreviated to: -.nf - -.I " " in\-hex out\-hex - -.fi -The -.I in\-start\-hex -and -.I in\-end\-hex -fields (or the single -.I in\-hex -field) specify the Unicode range. The -.I out\-start\-hex -field (or the -.I out\-hex -field) specifies the start of the output encoding range. The length -of the -.I out\-start\-hex -(or -.IR out\-hex ) -string determines the length of the output characters (e.g., UTF-8 -uses different numbers of bytes to represent characters in different -ranges). Entries must be given in increasing Unicode order. Only one -file is allowed per encoding; the last specified file is used. The -.IR Latin1 , -.IR ASCII7 , -.IR Symbol , -.IR ZapfDingbats , -.IR UTF-8 , -and -.I UCS-2 -encodings are predefined. -.TP -.BI cMapDir " registry\-ordering dir" -Specifies a search directory, -.IR dir , -for CMaps for the -.I registry\-ordering -character collection. There can be multiple directories for a -particular collection. There are no default CMap directories. -.TP -.BI toUnicodeDir " dir" -Specifies a search directory, -.IR dir , -for ToUnicode CMaps. There can be multiple ToUnicode directories. -There are no default ToUnicode directories. -.SH DISPLAY FONTS -.TP -.BI displayFontT1 " PDF\-font\-name T1\-file" -Maps a PDF font, -.IR PDF\-font\-name , -to a Type 1 font for display. The Type 1 font file, -.IR T1\-file , -should be a standard .pfa or .pfb file. -.TP -.BI displayFontTT " PDF\-font\-name TT\-file" -Maps a PDF font, -.IR PDF\-font\-name , -to a TrueType font for display. The TrueType font file, -.IR TT\-file , -should be a standard .ttf file. -.TP -.BI displayNamedCIDFontT1 " PDF\-font\-name T1\-file" -Maps a specific PDF CID (16-bit) font, -.IR PDF\-font\-name , -to a CID font (16-bit PostScript font), for display. There are no -default CID font mappings. -.TP -.BI displayCIDFontT1 " registry\-ordering T1\-file" -Maps the -.I registry\-ordering -character collection to a CID font (16-bit PostScript font), for -display. This mapping is used if the font name doesn't match any of -the fonts declared with displayNamedCIDFont* commands. There are no -default CID font mappings. -.TP -.BI displayNamedCIDFontTT " PDF\-font\-name TT\-file" -Maps a specific PDF CID (16-bit) font, -.IR PDF\-font\-name , -to a (16-bit) TrueType font, for display. There are no default CID -font mappings. -.TP -.BI displayCIDFontTT " registry\-ordering TT\-file" -Maps the -.I registry\-ordering -character collection to a (16-bit) TrueType font, for display. This -mapping is used if the font name doesn't match any of the fonts -declared with displayNamedCIDFont* commands. There are no default CID -font mappings. -.TP -.BI fontDir " dir" -Specifies a search directory for external font files. There can be -multiple fontDir directories. If a PDF file uses a font but doesn't -embed it, these directories will be searched for a matching font file. -These fonts are used by both xpdf (for display) and pdftops (for -embedding in the generated PostScript). Type 1 fonts must have a -suffix of ".pfa", ".pfb", ".ps", or no suffix at all. TrueType fonts -must have a ".ttf" suffix. Other files in these directories will be -ignored. There are no default fontDir directories. -.SH POSTSCRIPT CONTROL -.TP -.BI psPaperSize " width(pts) height(pts)" -Sets the paper size for PostScript output. The -.I width -and -.I height -parameters give the paper size in PostScript points (1 point = 1/72 -inch). -.TP -.BR psPaperSize " letter | legal | A4 | A3 | match" -Sets the paper size for PostScript output to a standard size. The -default paper size is set when xpdf and pdftops are built, typically -to "letter" or "A4". This can also be set to "match", which will set -the paper size to match the size specified in the PDF file. -.TP -.BR psImageableArea " llx lly urx ury" -Sets the imageable area for PostScript output. The four integers are -the coordinates of the lower-left and upper-right corners of the -imageable region, specified in points (with the origin being the -lower-left corner of the paper). This defaults to the full paper -size; the psPaperSize option will reset the imageable area -coordinates. -.TP -.BR psCrop " yes | no" -If set to "yes", PostScript output is cropped to the CropBox specified -in the PDF file; otherwise no cropping is done. This defaults to -"yes". -.TP -.BR psExpandSmaller " yes | no" -If set to "yes", PDF pages smaller than the PostScript imageable area -are expanded to fill the imageable area. Otherwise, no scalling is -done on smaller pages. This defaults to "no". -.TP -.BR psShrinkLarger " yes | no" -If set to yes, PDF pages larger than the PostScript imageable area are -shrunk to fit the imageable area. Otherwise, no scaling is done on -larger pages. This defaults to "yes". -.TP -.BR psCenter " yes | no" -If set to yes, PDF pages smaller than the PostScript imageable area -(after any scaling) are centered in the imageable area. Otherwise, -they are aligned at the lower-left corner of the imageable area. This -defaults to "yes". -.TP -.BR psDuplex " yes | no" -If set to "yes", the generated PostScript will set the "Duplex" -pagedevice entry. This tells duplex-capable printers to enable -duplexing. This defaults to "no". -.TP -.BR psLevel " level1 | level1sep | level2 | level2sep | level3 | level3Sep" -Sets the PostScript level to generate. This defaults to "level2". -.TP -.BI psFont " PDF\-font\-name PS\-font\-name" -When the -.I PDF\-font\-name -font is used in a PDF file, it will be translated to the PostScript -font -.IR PS\-font\-name , -which is assumed to be resident in the printer. Typically, -.I PDF\-font\-name -and -.I PS\-font\-name -are the same. By default, only the Base-14 fonts are assumed to be -resident. -.TP -.BI psNamedFont16 " PDF\-font\-name wMode PS\-font\-name encoding" -When the 16-bit font -.I PDF\-font\-name -is used in a PDF file with the -.I wMode -writing mode and is not embedded, the -.I PS\-font\-name -font is substituted for it. The writing mode must be either \'H' for -horizontal or \'V' for vertical. The -.I PS\-font\-name -font is assumed to be resident in the printer and to use the specified -encoding (which must have been defined with the unicodeMap command). -.TP -.BI psFont16 " registry\-ordering wMode PS\-font\-name encoding" -When a 16-bit font using the -.I registry\-ordering -character collection and -.I wMode -writing mode is not embedded and does not match any of the fonts -declared in psNamedFont16 commands, the -.I PS\-font\-name -font is substituted for it. The writing mode must be either \'H' for -horizontal or \'V' for vertical. The -.I PS\-font\-name -font is assumed to be resident in the printer and to use the specified -writing mode and encoding (which must have been defined with the -unicodeMap command). -.TP -.BR psEmbedType1Fonts " yes | no" -If set to "no", prevents embedding of Type 1 fonts in generated -PostScript. This defaults to "yes". -.TP -.BR psEmbedTrueTypeFonts " yes | no" -If set to "no", prevents embedding of TrueType fonts in generated -PostScript. This defaults to "yes". -.TP -.BR psEmbedCIDTrueTypeFonts " yes | no" -If set to "no", prevents embedding of CID TrueType fonts in generated -PostScript. For Level 3 PostScript, this generates a CID font, for -lower levels it generates a non-CID composite font. -.TP -.BR psEmbedCIDPostScriptFonts " yes | no" -If set to "no", prevents embedding of CID PostScript fonts in -generated PostScript. For Level 3 PostScript, this generates a CID -font, for lower levels it generates a non-CID composite font. -.TP -.BR psFontPassthrough " yes | no" -If set to "yes", pass fonts through to the PostScript output without -substitution. Fonts which are embedded in the PDF file will be -embedded in the PS file. Fonts which are not embedded in the PDF file -will not be embedded in the PS file, i.e., they are expected to be -available on the printer. This defaults to "no". -.TP -.BR psPreload " yes | no" -If set to "yes", PDF forms are converted to PS procedures, and image -data is preloaded. This uses more memory in the PostScript -interpreter, but generates significantly smaller PS files in -situations where, e.g., the same image is drawn on every page of a -long document. This defaults to "no". -.TP -.BR psOPI " yes | no" -If set to "yes", generates PostScript OPI comments for all images and -forms which have OPI information. This option is only available if -the Xpdf tools were compiled with OPI support. This defaults to "no". -.TP -.BR psASCIIHex " yes | no" -If set to "yes", the ASCIIHexEncode filter will be used instead of -ASCII85Encode for binary data. This defaults to "no". -.TP -.BR psUncompressPreloadedImages " yes | no" -If set to "yes", all preloaded images in PS files will uncompressed. -If set to "no", the original compressed images will be used when -possible. The "yes" setting is useful to work around certain buggy -PostScript interpreters. This defaults to "no". -.TP -.BR psRasterResolution " float" -Set the resolution (in dpi) for rasterized pages in PostScript output. -(Pdftops will rasterize pages which use transparency.) This defaults -to 300. -.TP -.BR psRasterMono " yes | no" -If set to "yes", rasterized pages in PS files will be monochrome -(8-bit gray) instead of color. This defaults to "no". -.TP -.BI psFile " file\-or\-command" -Sets the default PostScript file or print command for xpdf. Commands -start with a \'|' character; anything else is a file. If the file -name or command contains spaces it must be quoted. This defaults to -unset, which tells xpdf to generate a name of the form .ps for a -PDF file .pdf. -.TP -.BI fontDir " dir" -See the description above, in the DISPLAY FONTS section. -.SH TEXT CONTROL -.TP -.BI textEncoding " encoding\-name" -Sets the encoding to use for text output. (This can be overridden -with the "-enc" switch on the command line.) The -.I encoding\-name -must be defined with the unicodeMap command (see above). This -defaults to "Latin1". -.TP -.BR textEOL " unix | dos | mac" -Sets the end-of-line convention to use for text output. The options -are: -.nf - - unix = LF - dos = CR+LF - mac = CR - -.fi -(This can be overridden with the "-eol" switch on the command line.) -The default value is based on the OS where xpdf and pdftotext were -built. -.TP -.BR textPageBreaks " yes | no" -If set to "yes", text extraction will insert page breaks (form feed -characters) between pages. This defaults to "yes". -.TP -.BR textKeepTinyChars " yes | no" -If set to "yes", text extraction will keep all characters. If set to -"no", text extraction will discard tiny (smaller than 3 point) -characters after the first 50000 per page, avoiding extremely slow run -times for PDF files that use special fonts to do shading or -cross-hatching. This defaults to "no". -.SH MISCELLANEOUS SETTINGS -.TP -.BR initialZoom " \fIpercentage\fR | page | width" -Sets the initial zoom factor. A number specifies a zoom percentage, -where 100 means 72 dpi. You may also specify \'page', to fit the page -to the window size, or \'width', to fit the page width to the window -width. -.TP -.BR continuousView " yes | no" -If set to "yes", xpdf will start in continuous view mode, i.e., with -one vertical screoll bar for the whole document. This defaults to -"no". -.TP -.BR enableT1lib " yes | no" -Enables or disables use of t1lib (a Type 1 font rasterizer). This is -only relevant if the Xpdf tools were built with t1lib support. -("enableT1lib" replaces the old "t1libControl" option.) This option -defaults to "yes". -.TP -.BR enableFreeType " yes | no" -Enables or disables use of FreeType (a TrueType / Type 1 font -rasterizer). This is only relevant if the Xpdf tools were built with -FreeType support. ("enableFreeType" replaces the old -"freetypeControl" option.) This option defaults to "yes". -.TP -.BR antialias " yes | no" -Enables or disables font anti-aliasing in the PDF rasterizer. This -option affects all font rasterizers. ("antialias" replaces the -anti-aliasing control provided by the old "t1libControl" and -"freetypeControl" options.) This default to "yes". -.TP -.BR vectorAntialias " yes | no" -Enables or disables anti-aliasing of vector graphics in the PDF -rasterizer. This defaults to "yes". -.TP -.BR strokeAdjust " yes | no" -Enables or disables stroke adjustment. Stroke adjustment moves -horizontal and vertical lines by up to half a pixel to make them look -"cleaner" when vector anti-aliasing is enabled. This defaults to -"yes". -.TP -.BR screenType " dispersed | clustered | stochasticClustered" -Sets the halftone screen type, which will be used when generating a -monochrome (1-bit) bitmap. The three options are dispersed-dot -dithering, clustered-dot dithering (with a round dot and 45-degree -screen angle), and stochastic clustered-dot dithering. By default, -"stochasticClustered" is used for resolutions of 300 dpi and higher, -and "dispersed" is used for resolutions lower then 300 dpi. -.TP -.BI screenSize " integer" -Sets the size of the (square) halftone screen threshold matrix. By -default, this is 4 for dispersed-dot dithering, 10 for clustered-dot -dithering, and 100 for stochastic clustered-dot dithering. -.TP -.BI screenDotRadius " integer" -Sets the halftone screen dot radius. This is only used when -screenType is set to stochasticClustered, and it defaults to 2. In -clustered-dot mode, the dot radius is half of the screen size. -Dispersed-dot dithering doesn't have a dot radius. -.TP -.BI screenGamma " float" -Sets the halftone screen gamma correction parameter. Gamma values -greater than 1 make the output brighter; gamma values less than 1 make -it darker. The default value is 1. -.TP -.BI screenBlackThreshold " float" -When halftoning, all values below this threshold are forced to solid -black. This parameter is a floating point value between 0 (black) and -1 (white). The default value is 0. -.TP -.BI screenWhiteThreshold " float" -When halftoning, all values above this threshold are forced to solid -white. This parameter is a floating point value between 0 (black) and -1 (white). The default value is 1. -.TP -.BI drawAnnotations " yes | no" -If set to "no", annotations will not be drawn or printed. The default -value is "yes". -.TP -.BI overprintPreview " yes | no" -If set to "yes", generate overprint preview output, honoring the -OP/op/OPM settings in the PDF file. Ignored for non-CMYK output. The -default value is "no". -.TP -.BI launchCommand " command" -Sets the command executed when you click on a "launch"-type link. The -intent is for the command to be a program/script which determines the -file type and runs the appropriate viewer. The command line will -consist of the file to be launched, followed by any parameters -specified with the link. Do not use "%s" in "command". By default, -this is unset, and Xpdf will simply try to execute the file (after -prompting the user). -.TP -.BI urlCommand " command" -Sets the command executed when you click on a URL link. The string -"%s" will be replaced with the URL. (See the example below.) This -has no default value. -.TP -.BI movieCommand " command" -Sets the command executed when you click on a movie annotation. The -string "%s" will be replaced with the movie file name. This has no -default value. -.TP -.BI mapNumericCharNames " yes | no" -If set to "yes", the Xpdf tools will attempt to map various numeric -character names sometimes used in font subsets. In some cases this -leads to usable text, and in other cases it leads to gibberish -- -there is no way for Xpdf to tell. This defaults to "yes". -.TP -.BI mapUnknownCharNames " yes | no" -If set to "yes", and mapNumericCharNames is set to "no", the Xpdf -tools will apply a simple pass-through mapping (Unicode index = -character code) for all unrecognized glyph names. (For CID fonts, -setting mapNumericCharNames to "no" is unnecessary.) In some cases, -this leads to usable text, and in other cases it leads to gibberish -- -there is no way for Xpdf to tell. This defaults to "no". -.TP -.BI bind " modifiers-key context command ..." -Add a key or mouse button binding. -.I Modifiers -can be zero or more of: -.nf - - shift- - ctrl- - alt- - -.fi -.I Key -can be a regular ASCII character, or any one of: -.nf - - space - tab - return - enter - backspace - insert - delete - home - end - pgup - pgdn - left / right / up / down (arrow keys) - f1 .. f35 (function keys) - mousePress1 .. mousePress7 (mouse buttons) - mouseRelease1 .. mouseRelease7 (mouse buttons) - -.fi -.I Context -is either "any" or a comma-separated combination of: -.nf - - fullScreen / window (full screen mode on/off) - continuous / singlePage (continuous mode on/off) - overLink / offLink (mouse over link or not) - scrLockOn / scrLockOff (scroll lock on/off) - -.fi -The context string can include only one of each pair in the above -list. - -.I Command -is an Xpdf command (see the COMMANDS section of the -.BR xpdf (1) -man page for details). Multiple commands are separated by whitespace. - -The bind command replaces any existing binding, but only if it was -defined for the exact same modifiers, key, and context. All tokens -(modifiers, key, context, commands) are case-sensitive. - -Example key bindings: -.nf - - # bind ctrl-a in any context to the nextPage - # command - bind ctrl-a any nextPage - - # bind uppercase B, when in continuous mode - # with scroll lock on, to the reload command - # followed by the prevPage command - bind B continuous,scrLockOn reload prevPage - -.fi -See the -.BR xpdf (1) -man page for more examples. -.TP -.BI unbind " modifiers-key context" -Removes a key binding established with the bind command. This is most -useful to remove default key bindings before establishing new ones -(e.g., if the default key binding is given for "any" context, and you -want to create new key bindings for multiple contexts). -.TP -.BI printCommands " yes | no" -If set to "yes", drawing commands are printed as they're executed -(useful for debugging). This defaults to "no". -.TP -.BI errQuiet " yes | no" -If set to "yes", this suppresses all error and warning messages from -all of the Xpdf tools. This defaults to "no". -.SH EXAMPLES -The following is a sample xpdfrc file. -.nf - -# from the Thai support package -nameToUnicode /usr/local/share/xpdf/Thai.nameToUnicode - -# from the Japanese support package -cidToUnicode Adobe-Japan1 /usr/local/share/xpdf/Adobe-Japan1.cidToUnicode -unicodeMap JISX0208 /usr/local/share/xpdf/JISX0208.unicodeMap -cMapDir Adobe-Japan1 /usr/local/share/xpdf/cmap/Adobe-Japan1 - -# use the Base-14 Type 1 fonts from ghostscript -displayFontT1 Times-Roman /usr/local/share/ghostscript/fonts/n021003l.pfb -displayFontT1 Times-Italic /usr/local/share/ghostscript/fonts/n021023l.pfb -displayFontT1 Times-Bold /usr/local/share/ghostscript/fonts/n021004l.pfb -displayFontT1 Times-BoldItalic /usr/local/share/ghostscript/fonts/n021024l.pfb -displayFontT1 Helvetica /usr/local/share/ghostscript/fonts/n019003l.pfb -displayFontT1 Helvetica-Oblique /usr/local/share/ghostscript/fonts/n019023l.pfb -displayFontT1 Helvetica-Bold /usr/local/share/ghostscript/fonts/n019004l.pfb -displayFontT1 Helvetica-BoldOblique /usr/local/share/ghostscript/fonts/n019024l.pfb -displayFontT1 Courier /usr/local/share/ghostscript/fonts/n022003l.pfb -displayFontT1 Courier-Oblique /usr/local/share/ghostscript/fonts/n022023l.pfb -displayFontT1 Courier-Bold /usr/local/share/ghostscript/fonts/n022004l.pfb -displayFontT1 Courier-BoldOblique /usr/local/share/ghostscript/fonts/n022024l.pfb -displayFontT1 Symbol /usr/local/share/ghostscript/fonts/s050000l.pfb -displayFontT1 ZapfDingbats /usr/local/share/ghostscript/fonts/d050000l.pfb - -# use the Bakoma Type 1 fonts -# (this assumes they happen to be installed in /usr/local/fonts/bakoma) -fontDir /usr/local/fonts/bakoma - -# set some PostScript options -psPaperSize letter -psDuplex no -psLevel level2 -psEmbedType1Fonts yes -psEmbedTrueTypeFonts yes -psFile "| lpr -Pprinter5" - -# assume that the PostScript printer has the Univers and -# Univers-Bold fonts -psFont Univers Univers -psFont Univers-Bold Univers-Bold - -# set the text output options -textEncoding UTF-8 -textEOL unix - -# misc options -enableT1lib yes -enableFreeType yes -launchCommand viewer-script -urlCommand "netscape -remote 'openURL(%s)'" - -.fi -.SH FILES -.TP -.B /usr/local/etc/xpdfrc -This is the default location for the system-wide configuration file. -Depending on build options, it may be placed elsewhere. -.TP -.B $HOME/.xpdfrc -This is the user's configuration file. If it exists, it will be read -in place of the system-wide file. -.SH AUTHOR -The Xpdf software and documentation are copyright 1996-2007 Glyph & -Cog, LLC. -.SH "SEE ALSO" -.BR xpdf (1), -.BR pdftops (1), -.BR pdftotext (1), -.BR pdfinfo (1), -.BR pdftoppm (1), -.BR pdfimages (1) -.br -.B http://www.foolabs.com/xpdf/ diff --git a/thirdparty/xpdf/3.02/src/doc/xpdfrc.cat b/thirdparty/xpdf/3.02/src/doc/xpdfrc.cat deleted file mode 100644 index 2b639cdb..00000000 --- a/thirdparty/xpdf/3.02/src/doc/xpdfrc.cat +++ /dev/null @@ -1,596 +0,0 @@ -xpdfrc(5) xpdfrc(5) - - - -NAME - xpdfrc - configuration file for Xpdf tools (version 3.02) - -DESCRIPTION - All of the Xpdf tools read a single configuration file. If you have a - .xpdfrc file in your home directory, it will be read. Otherwise, a - system-wide configuration file will be read from /usr/local/etc/xpdfrc, - if it exists. (This is its default location; depending on build - options, it may be placed elsewhere.) On Win32 systems, the xpdfrc - file should be placed in the same directory as the executables. - - The xpdfrc file consists of a series of configuration options, one per - line. Blank lines and lines starting with a '#' (comments) are - ignored. - - The following sections list all of the configuration options, sorted - into functional groups. There is an examples section at the end. - -INCLUDE FILES - include config-file - Includes the specified config file. The effect of this is - equivalent to inserting the contents of config-file directly - into the parent config file in place of the include command. - Config files can be nested arbitrarily deeply. - -CHARACTER MAPPING - nameToUnicode map-file - Specifies a file with the mapping from character names to Uni- - code. This is used to handle PDF fonts that have valid encod- - ings but no ToUnicode entry. Each line of a nameToUnicode file - looks like this: - - hex-string name - - The hex-string is the Unicode (UCS-2) character index, and name - is the corresponding character name. Multiple nameToUnicode - files can be used; if a character name is given more than once, - the code in the last specified file is used. There is a built- - in default nameToUnicode table with all of Adobe's standard - character names. - - cidToUnicode registry-ordering map-file - Specifies the file with the mapping from character collection to - Unicode. Each line of a cidToUnicode file represents one char- - acter: - - hex-string - - The hex-string is the Unicode (UCS-2) index for that character. - The first line maps CID 0, the second line CID 1, etc. File - size is determined by size of the character collection. Only - one file is allowed per character collection; the last specified - file is used. There are no built-in cidToUnicode mappings. - - unicodeToUnicode font-name-substring map-file - This is used to work around PDF fonts which have incorrect Uni- - code information. It specifies a file which maps from the given - (incorrect) Unicode indexes to the correct ones. The mapping - will be used for any font whose name contains font-name-sub- - string. Each line of a unicodeToUnicode file represents one - Unicode character: - - in-hex out-hex1 out-hex2 ... - - The in-hex field is an input (incorrect) Unicode index, and the - rest of the fields are one or more output (correct) Unicode - indexes. Each occurrence of in-hex will be converted to the - specified output sequence. - - unicodeMap encoding-name map-file - Specifies the file with mapping from Unicode to encoding-name. - These encodings are used for X display fonts and text output - (see below). Each line of a unicodeMap file represents a range - of one or more Unicode characters which maps linearly to a range - in the output encoding: - - in-start-hex in-end-hex out-start-hex - - Entries for single characters can be abbreviated to: - - in-hex out-hex - - The in-start-hex and in-end-hex fields (or the single in-hex - field) specify the Unicode range. The out-start-hex field (or - the out-hex field) specifies the start of the output encoding - range. The length of the out-start-hex (or out-hex) string - determines the length of the output characters (e.g., UTF-8 uses - different numbers of bytes to represent characters in different - ranges). Entries must be given in increasing Unicode order. - Only one file is allowed per encoding; the last specified file - is used. The Latin1, ASCII7, Symbol, ZapfDingbats, UTF-8, and - UCS-2 encodings are predefined. - - cMapDir registry-ordering dir - Specifies a search directory, dir, for CMaps for the reg- - istry-ordering character collection. There can be multiple - directories for a particular collection. There are no default - CMap directories. - - toUnicodeDir dir - Specifies a search directory, dir, for ToUnicode CMaps. There - can be multiple ToUnicode directories. There are no default - ToUnicode directories. - -DISPLAY FONTS - displayFontT1 PDF-font-name T1-file - Maps a PDF font, PDF-font-name, to a Type 1 font for display. - The Type 1 font file, T1-file, should be a standard .pfa or .pfb - file. - - displayFontTT PDF-font-name TT-file - Maps a PDF font, PDF-font-name, to a TrueType font for display. - The TrueType font file, TT-file, should be a standard .ttf file. - - displayNamedCIDFontT1 PDF-font-name T1-file - Maps a specific PDF CID (16-bit) font, PDF-font-name, to a CID - font (16-bit PostScript font), for display. There are no - default CID font mappings. - - displayCIDFontT1 registry-ordering T1-file - Maps the registry-ordering character collection to a CID font - (16-bit PostScript font), for display. This mapping is used if - the font name doesn't match any of the fonts declared with dis- - playNamedCIDFont* commands. There are no default CID font map- - pings. - - displayNamedCIDFontTT PDF-font-name TT-file - Maps a specific PDF CID (16-bit) font, PDF-font-name, to a - (16-bit) TrueType font, for display. There are no default CID - font mappings. - - displayCIDFontTT registry-ordering TT-file - Maps the registry-ordering character collection to a (16-bit) - TrueType font, for display. This mapping is used if the font - name doesn't match any of the fonts declared with displayNamed- - CIDFont* commands. There are no default CID font mappings. - - fontDir dir - Specifies a search directory for external font files. There can - be multiple fontDir directories. If a PDF file uses a font but - doesn't embed it, these directories will be searched for a - matching font file. These fonts are used by both xpdf (for dis- - play) and pdftops (for embedding in the generated PostScript). - Type 1 fonts must have a suffix of ".pfa", ".pfb", ".ps", or no - suffix at all. TrueType fonts must have a ".ttf" suffix. Other - files in these directories will be ignored. There are no - default fontDir directories. - -POSTSCRIPT CONTROL - psPaperSize width(pts) height(pts) - Sets the paper size for PostScript output. The width and height - parameters give the paper size in PostScript points (1 point = - 1/72 inch). - - psPaperSize letter | legal | A4 | A3 | match - Sets the paper size for PostScript output to a standard size. - The default paper size is set when xpdf and pdftops are built, - typically to "letter" or "A4". This can also be set to "match", - which will set the paper size to match the size specified in the - PDF file. - - psImageableArea llx lly urx ury - Sets the imageable area for PostScript output. The four inte- - gers are the coordinates of the lower-left and upper-right cor- - ners of the imageable region, specified in points (with the ori- - gin being the lower-left corner of the paper). This defaults to - the full paper size; the psPaperSize option will reset the - imageable area coordinates. - - psCrop yes | no - If set to "yes", PostScript output is cropped to the CropBox - specified in the PDF file; otherwise no cropping is done. This - defaults to "yes". - - psExpandSmaller yes | no - If set to "yes", PDF pages smaller than the PostScript imageable - area are expanded to fill the imageable area. Otherwise, no - scalling is done on smaller pages. This defaults to "no". - - psShrinkLarger yes | no - If set to yes, PDF pages larger than the PostScript imageable - area are shrunk to fit the imageable area. Otherwise, no scal- - ing is done on larger pages. This defaults to "yes". - - psCenter yes | no - If set to yes, PDF pages smaller than the PostScript imageable - area (after any scaling) are centered in the imageable area. - Otherwise, they are aligned at the lower-left corner of the - imageable area. This defaults to "yes". - - psDuplex yes | no - If set to "yes", the generated PostScript will set the "Duplex" - pagedevice entry. This tells duplex-capable printers to enable - duplexing. This defaults to "no". - - psLevel level1 | level1sep | level2 | level2sep | level3 | level3Sep - Sets the PostScript level to generate. This defaults to - "level2". - - psFont PDF-font-name PS-font-name - When the PDF-font-name font is used in a PDF file, it will be - translated to the PostScript font PS-font-name, which is assumed - to be resident in the printer. Typically, PDF-font-name and - PS-font-name are the same. By default, only the Base-14 fonts - are assumed to be resident. - - psNamedFont16 PDF-font-name wMode PS-font-name encoding - When the 16-bit font PDF-font-name is used in a PDF file with - the wMode writing mode and is not embedded, the PS-font-name - font is substituted for it. The writing mode must be either 'H' - for horizontal or 'V' for vertical. The PS-font-name font is - assumed to be resident in the printer and to use the specified - encoding (which must have been defined with the unicodeMap com- - mand). - - psFont16 registry-ordering wMode PS-font-name encoding - When a 16-bit font using the registry-ordering character collec- - tion and wMode writing mode is not embedded and does not match - any of the fonts declared in psNamedFont16 commands, the - PS-font-name font is substituted for it. The writing mode must - be either 'H' for horizontal or 'V' for vertical. The - PS-font-name font is assumed to be resident in the printer and - to use the specified writing mode and encoding (which must have - been defined with the unicodeMap command). - - psEmbedType1Fonts yes | no - If set to "no", prevents embedding of Type 1 fonts in generated - PostScript. This defaults to "yes". - - psEmbedTrueTypeFonts yes | no - If set to "no", prevents embedding of TrueType fonts in gener- - ated PostScript. This defaults to "yes". - - psEmbedCIDTrueTypeFonts yes | no - If set to "no", prevents embedding of CID TrueType fonts in gen- - erated PostScript. For Level 3 PostScript, this generates a CID - font, for lower levels it generates a non-CID composite font. - - psEmbedCIDPostScriptFonts yes | no - If set to "no", prevents embedding of CID PostScript fonts in - generated PostScript. For Level 3 PostScript, this generates a - CID font, for lower levels it generates a non-CID composite - font. - - psFontPassthrough yes | no - If set to "yes", pass fonts through to the PostScript output - without substitution. Fonts which are embedded in the PDF file - will be embedded in the PS file. Fonts which are not embedded - in the PDF file will not be embedded in the PS file, i.e., they - are expected to be available on the printer. This defaults to - "no". - - psPreload yes | no - If set to "yes", PDF forms are converted to PS procedures, and - image data is preloaded. This uses more memory in the Post- - Script interpreter, but generates significantly smaller PS files - in situations where, e.g., the same image is drawn on every page - of a long document. This defaults to "no". - - psOPI yes | no - If set to "yes", generates PostScript OPI comments for all - images and forms which have OPI information. This option is - only available if the Xpdf tools were compiled with OPI support. - This defaults to "no". - - psASCIIHex yes | no - If set to "yes", the ASCIIHexEncode filter will be used instead - of ASCII85Encode for binary data. This defaults to "no". - - psUncompressPreloadedImages yes | no - If set to "yes", all preloaded images in PS files will uncom- - pressed. If set to "no", the original compressed images will be - used when possible. The "yes" setting is useful to work around - certain buggy PostScript interpreters. This defaults to "no". - - psRasterResolution float - Set the resolution (in dpi) for rasterized pages in PostScript - output. (Pdftops will rasterize pages which use transparency.) - This defaults to 300. - - psRasterMono yes | no - If set to "yes", rasterized pages in PS files will be monochrome - (8-bit gray) instead of color. This defaults to "no". - - psFile file-or-command - Sets the default PostScript file or print command for xpdf. - Commands start with a '|' character; anything else is a file. - If the file name or command contains spaces it must be quoted. - This defaults to unset, which tells xpdf to generate a name of - the form .ps for a PDF file .pdf. - - fontDir dir - See the description above, in the DISPLAY FONTS section. - -TEXT CONTROL - textEncoding encoding-name - Sets the encoding to use for text output. (This can be overrid- - den with the "-enc" switch on the command line.) The encod- - ing-name must be defined with the unicodeMap command (see - above). This defaults to "Latin1". - - textEOL unix | dos | mac - Sets the end-of-line convention to use for text output. The - options are: - - unix = LF - dos = CR+LF - mac = CR - - (This can be overridden with the "-eol" switch on the command - line.) The default value is based on the OS where xpdf and - pdftotext were built. - - textPageBreaks yes | no - If set to "yes", text extraction will insert page breaks (form - feed characters) between pages. This defaults to "yes". - - textKeepTinyChars yes | no - If set to "yes", text extraction will keep all characters. If - set to "no", text extraction will discard tiny (smaller than 3 - point) characters after the first 50000 per page, avoiding - extremely slow run times for PDF files that use special fonts to - do shading or cross-hatching. This defaults to "no". - -MISCELLANEOUS SETTINGS - initialZoom percentage | page | width - Sets the initial zoom factor. A number specifies a zoom per- - centage, where 100 means 72 dpi. You may also specify 'page', - to fit the page to the window size, or 'width', to fit the page - width to the window width. - - continuousView yes | no - If set to "yes", xpdf will start in continuous view mode, i.e., - with one vertical screoll bar for the whole document. This - defaults to "no". - - enableT1lib yes | no - Enables or disables use of t1lib (a Type 1 font rasterizer). - This is only relevant if the Xpdf tools were built with t1lib - support. ("enableT1lib" replaces the old "t1libControl" - option.) This option defaults to "yes". - - enableFreeType yes | no - Enables or disables use of FreeType (a TrueType / Type 1 font - rasterizer). This is only relevant if the Xpdf tools were built - with FreeType support. ("enableFreeType" replaces the old - "freetypeControl" option.) This option defaults to "yes". - - antialias yes | no - Enables or disables font anti-aliasing in the PDF rasterizer. - This option affects all font rasterizers. ("antialias" replaces - the anti-aliasing control provided by the old "t1libControl" and - "freetypeControl" options.) This default to "yes". - - vectorAntialias yes | no - Enables or disables anti-aliasing of vector graphics in the PDF - rasterizer. This defaults to "yes". - - strokeAdjust yes | no - Enables or disables stroke adjustment. Stroke adjustment moves - horizontal and vertical lines by up to half a pixel to make them - look "cleaner" when vector anti-aliasing is enabled. This - defaults to "yes". - - screenType dispersed | clustered | stochasticClustered - Sets the halftone screen type, which will be used when generat- - ing a monochrome (1-bit) bitmap. The three options are dis- - persed-dot dithering, clustered-dot dithering (with a round dot - and 45-degree screen angle), and stochastic clustered-dot - dithering. By default, "stochasticClustered" is used for reso- - lutions of 300 dpi and higher, and "dispersed" is used for reso- - lutions lower then 300 dpi. - - screenSize integer - Sets the size of the (square) halftone screen threshold matrix. - By default, this is 4 for dispersed-dot dithering, 10 for clus- - tered-dot dithering, and 100 for stochastic clustered-dot - dithering. - - screenDotRadius integer - Sets the halftone screen dot radius. This is only used when - screenType is set to stochasticClustered, and it defaults to 2. - In clustered-dot mode, the dot radius is half of the screen - size. Dispersed-dot dithering doesn't have a dot radius. - - screenGamma float - Sets the halftone screen gamma correction parameter. Gamma val- - ues greater than 1 make the output brighter; gamma values less - than 1 make it darker. The default value is 1. - - screenBlackThreshold float - When halftoning, all values below this threshold are forced to - solid black. This parameter is a floating point value between 0 - (black) and 1 (white). The default value is 0. - - screenWhiteThreshold float - When halftoning, all values above this threshold are forced to - solid white. This parameter is a floating point value between 0 - (black) and 1 (white). The default value is 1. - - drawAnnotations yes | no - If set to "no", annotations will not be drawn or printed. The - default value is "yes". - - overprintPreview yes | no - If set to "yes", generate overprint preview output, honoring the - OP/op/OPM settings in the PDF file. Ignored for non-CMYK out- - put. The default value is "no". - - launchCommand command - Sets the command executed when you click on a "launch"-type - link. The intent is for the command to be a program/script - which determines the file type and runs the appropriate viewer. - The command line will consist of the file to be launched, fol- - lowed by any parameters specified with the link. Do not use - "%s" in "command". By default, this is unset, and Xpdf will - simply try to execute the file (after prompting the user). - - urlCommand command - Sets the command executed when you click on a URL link. The - string "%s" will be replaced with the URL. (See the example - below.) This has no default value. - - movieCommand command - Sets the command executed when you click on a movie annotation. - The string "%s" will be replaced with the movie file name. This - has no default value. - - mapNumericCharNames yes | no - If set to "yes", the Xpdf tools will attempt to map various - numeric character names sometimes used in font subsets. In some - cases this leads to usable text, and in other cases it leads to - gibberish -- there is no way for Xpdf to tell. This defaults to - "yes". - - mapUnknownCharNames yes | no - If set to "yes", and mapNumericCharNames is set to "no", the - Xpdf tools will apply a simple pass-through mapping (Unicode - index = character code) for all unrecognized glyph names. (For - CID fonts, setting mapNumericCharNames to "no" is unnecessary.) - In some cases, this leads to usable text, and in other cases it - leads to gibberish -- there is no way for Xpdf to tell. This - defaults to "no". - - bind modifiers-key context command ... - Add a key or mouse button binding. Modifiers can be zero or - more of: - - shift- - ctrl- - alt- - - Key can be a regular ASCII character, or any one of: - - space - tab - return - enter - backspace - insert - delete - home - end - pgup - pgdn - left / right / up / down (arrow keys) - f1 .. f35 (function keys) - mousePress1 .. mousePress7 (mouse buttons) - mouseRelease1 .. mouseRelease7 (mouse buttons) - - Context is either "any" or a comma-separated combination of: - - fullScreen / window (full screen mode on/off) - continuous / singlePage (continuous mode on/off) - overLink / offLink (mouse over link or not) - scrLockOn / scrLockOff (scroll lock on/off) - - The context string can include only one of each pair in the - above list. - - Command is an Xpdf command (see the COMMANDS section of the - xpdf(1) man page for details). Multiple commands are separated - by whitespace. - - The bind command replaces any existing binding, but only if it - was defined for the exact same modifiers, key, and context. All - tokens (modifiers, key, context, commands) are case-sensitive. - - Example key bindings: - - # bind ctrl-a in any context to the nextPage - # command - bind ctrl-a any nextPage - - # bind uppercase B, when in continuous mode - # with scroll lock on, to the reload command - # followed by the prevPage command - bind B continuous,scrLockOn reload prevPage - - See the xpdf(1) man page for more examples. - - unbind modifiers-key context - Removes a key binding established with the bind command. This - is most useful to remove default key bindings before establish- - ing new ones (e.g., if the default key binding is given for - "any" context, and you want to create new key bindings for mul- - tiple contexts). - - printCommands yes | no - If set to "yes", drawing commands are printed as they're exe- - cuted (useful for debugging). This defaults to "no". - - errQuiet yes | no - If set to "yes", this suppresses all error and warning messages - from all of the Xpdf tools. This defaults to "no". - -EXAMPLES - The following is a sample xpdfrc file. - - # from the Thai support package - nameToUnicode /usr/local/share/xpdf/Thai.nameToUnicode - - # from the Japanese support package - cidToUnicode Adobe-Japan1 /usr/local/share/xpdf/Adobe-Japan1.cidToUnicode - unicodeMap JISX0208 /usr/local/share/xpdf/JISX0208.unicodeMap - cMapDir Adobe-Japan1 /usr/local/share/xpdf/cmap/Adobe-Japan1 - - # use the Base-14 Type 1 fonts from ghostscript - displayFontT1 Times-Roman /usr/local/share/ghostscript/fonts/n021003l.pfb - displayFontT1 Times-Italic /usr/local/share/ghostscript/fonts/n021023l.pfb - displayFontT1 Times-Bold /usr/local/share/ghostscript/fonts/n021004l.pfb - displayFontT1 Times-BoldItalic /usr/local/share/ghostscript/fonts/n021024l.pfb - displayFontT1 Helvetica /usr/local/share/ghostscript/fonts/n019003l.pfb - displayFontT1 Helvetica-Oblique /usr/local/share/ghostscript/fonts/n019023l.pfb - displayFontT1 Helvetica-Bold /usr/local/share/ghostscript/fonts/n019004l.pfb - displayFontT1 Helvetica-BoldOblique /usr/local/share/ghostscript/fonts/n019024l.pfb - displayFontT1 Courier /usr/local/share/ghostscript/fonts/n022003l.pfb - displayFontT1 Courier-Oblique /usr/local/share/ghostscript/fonts/n022023l.pfb - displayFontT1 Courier-Bold /usr/local/share/ghostscript/fonts/n022004l.pfb - displayFontT1 Courier-BoldOblique /usr/local/share/ghostscript/fonts/n022024l.pfb - displayFontT1 Symbol /usr/local/share/ghostscript/fonts/s050000l.pfb - displayFontT1 ZapfDingbats /usr/local/share/ghostscript/fonts/d050000l.pfb - - # use the Bakoma Type 1 fonts - # (this assumes they happen to be installed in /usr/local/fonts/bakoma) - fontDir /usr/local/fonts/bakoma - - # set some PostScript options - psPaperSize letter - psDuplex no - psLevel level2 - psEmbedType1Fonts yes - psEmbedTrueTypeFonts yes - psFile "| lpr -Pprinter5" - - # assume that the PostScript printer has the Univers and - # Univers-Bold fonts - psFont Univers Univers - psFont Univers-Bold Univers-Bold - - # set the text output options - textEncoding UTF-8 - textEOL unix - - # misc options - enableT1lib yes - enableFreeType yes - launchCommand viewer-script - urlCommand "netscape -remote 'openURL(%s)'" - - -FILES - /usr/local/etc/xpdfrc - This is the default location for the system-wide configuration - file. Depending on build options, it may be placed elsewhere. - - $HOME/.xpdfrc - This is the user's configuration file. If it exists, it will be - read in place of the system-wide file. - -AUTHOR - The Xpdf software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - -SEE ALSO - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdftoppm(1), pdfim- - ages(1) - http://www.foolabs.com/xpdf/ - - - - 27 February 2007 xpdfrc(5) diff --git a/thirdparty/xpdf/3.02/src/doc/xpdfrc.hlp b/thirdparty/xpdf/3.02/src/doc/xpdfrc.hlp deleted file mode 100644 index 729b2367..00000000 --- a/thirdparty/xpdf/3.02/src/doc/xpdfrc.hlp +++ /dev/null @@ -1,604 +0,0 @@ -! Generated automatically by mantohlp -1 xpdfrc -2 NCLUDE_FILE - - xpdfrc - configuration file for Xpdf tools (version 3.02) - - include config-file - Includes the specified config file. The effect of this is - equivalent to inserting the contents of config-file directly - into the parent config file in place of the include command. - Config files can be nested arbitrarily deeply. - - () - -2 HARACTER_MAPPIN - - nameToUnicode map-file - Specifies a file with the mapping from character names to Uni- - code. This is used to handle PDF fonts that have valid encod- - ings but no ToUnicode entry. Each line of a nameToUnicode file - looks like this: - - hex-string name - - The hex-string is the Unicode (UCS-2) character index, and name - is the corresponding character name. Multiple nameToUnicode - files can be used; if a character name is given more than once, - the code in the last specified file is used. There is a built- - in default nameToUnicode table with all of Adobe's standard - character names. - - cidToUnicode registry-ordering map-file - Specifies the file with the mapping from character collection to - Unicode. Each line of a cidToUnicode file represents one char- - acter: - - hex-string - - The hex-string is the Unicode (UCS-2) index for that character. - The first line maps CID 0, the second line CID 1, etc. File - size is determined by size of the character collection. Only - one file is allowed per character collection; the last specified - file is used. There are no built-in cidToUnicode mappings. - - unicodeToUnicode font-name-substring map-file - This is used to work around PDF fonts which have incorrect Uni- - code information. It specifies a file which maps from the given - (incorrect) Unicode indexes to the correct ones. The mapping - will be used for any font whose name contains font-name-sub- - string. Each line of a unicodeToUnicode file represents one - Unicode character: - - in-hex out-hex1 out-hex2 ... - - The in-hex field is an input (incorrect) Unicode index, and the - rest of the fields are one or more output (correct) Unicode - indexes. Each occurrence of in-hex will be converted to the - specified output sequence. - - unicodeMap encoding-name map-file - Specifies the file with mapping from Unicode to encoding-name. - These encodings are used for X display fonts and text output - (see below). Each line of a unicodeMap file represents a range - of one or more Unicode characters which maps linearly to a range - in the output encoding: - - in-start-hex in-end-hex out-start-hex - - Entries for single characters can be abbreviated to: - - in-hex out-hex - - The in-start-hex and in-end-hex fields (or the single in-hex - field) specify the Unicode range. The out-start-hex field (or - the out-hex field) specifies the start of the output encoding - range. The length of the out-start-hex (or out-hex) string - determines the length of the output characters (e.g., UTF-8 uses - different numbers of bytes to represent characters in different - ranges). Entries must be given in increasing Unicode order. - Only one file is allowed per encoding; the last specified file - is used. The Latin1, ASCII7, Symbol, ZapfDingbats, UTF-8, and - UCS-2 encodings are predefined. - - cMapDir registry-ordering dir - Specifies a search directory, dir, for CMaps for the reg- - istry-ordering character collection. There can be multiple - directories for a particular collection. There are no default - CMap directories. - - toUnicodeDir dir - Specifies a search directory, dir, for ToUnicode CMaps. There - can be multiple ToUnicode directories. There are no default - ToUnicode directories. - - () - -2 ISPLAY_FONT - - displayFontT1 PDF-font-name T1-file - Maps a PDF font, PDF-font-name, to a Type 1 font for display. - The Type 1 font file, T1-file, should be a standard .pfa or .pfb - file. - - displayFontTT PDF-font-name TT-file - Maps a PDF font, PDF-font-name, to a TrueType font for display. - The TrueType font file, TT-file, should be a standard .ttf file. - - displayNamedCIDFontT1 PDF-font-name T1-file - Maps a specific PDF CID (16-bit) font, PDF-font-name, to a CID - font (16-bit PostScript font), for display. There are no - default CID font mappings. - - displayCIDFontT1 registry-ordering T1-file - Maps the registry-ordering character collection to a CID font - (16-bit PostScript font), for display. This mapping is used if - the font name doesn't match any of the fonts declared with dis- - playNamedCIDFont* commands. There are no default CID font map- - pings. - - displayNamedCIDFontTT PDF-font-name TT-file - Maps a specific PDF CID (16-bit) font, PDF-font-name, to a - (16-bit) TrueType font, for display. There are no default CID - font mappings. - - displayCIDFontTT registry-ordering TT-file - Maps the registry-ordering character collection to a (16-bit) - TrueType font, for display. This mapping is used if the font - name doesn't match any of the fonts declared with displayNamed- - CIDFont* commands. There are no default CID font mappings. - - fontDir dir - Specifies a search directory for external font files. There can - be multiple fontDir directories. If a PDF file uses a font but - doesn't embed it, these directories will be searched for a - matching font file. These fonts are used by both xpdf (for dis- - play) and pdftops (for embedding in the generated PostScript). - Type 1 fonts must have a suffix of ".pfa", ".pfb", ".ps", or no - suffix at all. TrueType fonts must have a ".ttf" suffix. Other - files in these directories will be ignored. There are no - default fontDir directories. - - () - -2 OSTSCRIPT_CONTRO - - psPaperSize width(pts) height(pts) - Sets the paper size for PostScript output. The width and height - parameters give the paper size in PostScript points (1 point = - 1/72 inch). - - psPaperSize letter | legal | A4 | A3 | match - Sets the paper size for PostScript output to a standard size. - The default paper size is set when xpdf and pdftops are built, - typically to "letter" or "A4". This can also be set to "match", - which will set the paper size to match the size specified in the - PDF file. - - psImageableArea llx lly urx ury - Sets the imageable area for PostScript output. The four inte- - gers are the coordinates of the lower-left and upper-right cor- - ners of the imageable region, specified in points (with the ori- - gin being the lower-left corner of the paper). This defaults to - the full paper size; the psPaperSize option will reset the - imageable area coordinates. - - psCrop yes | no - If set to "yes", PostScript output is cropped to the CropBox - specified in the PDF file; otherwise no cropping is done. This - defaults to "yes". - - psExpandSmaller yes | no - If set to "yes", PDF pages smaller than the PostScript imageable - area are expanded to fill the imageable area. Otherwise, no - scalling is done on smaller pages. This defaults to "no". - - psShrinkLarger yes | no - If set to yes, PDF pages larger than the PostScript imageable - area are shrunk to fit the imageable area. Otherwise, no scal- - ing is done on larger pages. This defaults to "yes". - - psCenter yes | no - If set to yes, PDF pages smaller than the PostScript imageable - area (after any scaling) are centered in the imageable area. - Otherwise, they are aligned at the lower-left corner of the - imageable area. This defaults to "yes". - - psDuplex yes | no - If set to "yes", the generated PostScript will set the "Duplex" - pagedevice entry. This tells duplex-capable printers to enable - duplexing. This defaults to "no". - - psLevel level1 | level1sep | level2 | level2sep | level3 | level3Sep - Sets the PostScript level to generate. This defaults to - "level2". - - psFont PDF-font-name PS-font-name - When the PDF-font-name font is used in a PDF file, it will be - translated to the PostScript font PS-font-name, which is assumed - to be resident in the printer. Typically, PDF-font-name and - PS-font-name are the same. By default, only the Base-14 fonts - are assumed to be resident. - - psNamedFont16 PDF-font-name wMode PS-font-name encoding - When the 16-bit font PDF-font-name is used in a PDF file with - the wMode writing mode and is not embedded, the PS-font-name - font is substituted for it. The writing mode must be either 'H' - for horizontal or 'V' for vertical. The PS-font-name font is - assumed to be resident in the printer and to use the specified - encoding (which must have been defined with the unicodeMap com- - mand). - - psFont16 registry-ordering wMode PS-font-name encoding - When a 16-bit font using the registry-ordering character collec- - tion and wMode writing mode is not embedded and does not match - any of the fonts declared in psNamedFont16 commands, the - PS-font-name font is substituted for it. The writing mode must - be either 'H' for horizontal or 'V' for vertical. The - PS-font-name font is assumed to be resident in the printer and - to use the specified writing mode and encoding (which must have - been defined with the unicodeMap command). - - psEmbedType1Fonts yes | no - If set to "no", prevents embedding of Type 1 fonts in generated - PostScript. This defaults to "yes". - - psEmbedTrueTypeFonts yes | no - If set to "no", prevents embedding of TrueType fonts in gener- - ated PostScript. This defaults to "yes". - - psEmbedCIDTrueTypeFonts yes | no - If set to "no", prevents embedding of CID TrueType fonts in gen- - erated PostScript. For Level 3 PostScript, this generates a CID - font, for lower levels it generates a non-CID composite font. - - psEmbedCIDPostScriptFonts yes | no - If set to "no", prevents embedding of CID PostScript fonts in - generated PostScript. For Level 3 PostScript, this generates a - CID font, for lower levels it generates a non-CID composite - font. - - psFontPassthrough yes | no - If set to "yes", pass fonts through to the PostScript output - without substitution. Fonts which are embedded in the PDF file - will be embedded in the PS file. Fonts which are not embedded - in the PDF file will not be embedded in the PS file, i.e., they - are expected to be available on the printer. This defaults to - "no". - - psPreload yes | no - If set to "yes", PDF forms are converted to PS procedures, and - image data is preloaded. This uses more memory in the Post- - Script interpreter, but generates significantly smaller PS files - in situations where, e.g., the same image is drawn on every page - of a long document. This defaults to "no". - - psOPI yes | no - If set to "yes", generates PostScript OPI comments for all - images and forms which have OPI information. This option is - only available if the Xpdf tools were compiled with OPI support. - This defaults to "no". - - psASCIIHex yes | no - If set to "yes", the ASCIIHexEncode filter will be used instead - of ASCII85Encode for binary data. This defaults to "no". - - psUncompressPreloadedImages yes | no - If set to "yes", all preloaded images in PS files will uncom- - pressed. If set to "no", the original compressed images will be - used when possible. The "yes" setting is useful to work around - certain buggy PostScript interpreters. This defaults to "no". - - psRasterResolution float - Set the resolution (in dpi) for rasterized pages in PostScript - output. (Pdftops will rasterize pages which use transparency.) - This defaults to 300. - - psRasterMono yes | no - If set to "yes", rasterized pages in PS files will be monochrome - (8-bit gray) instead of color. This defaults to "no". - - psFile file-or-command - Sets the default PostScript file or print command for xpdf. - Commands start with a '|' character; anything else is a file. - If the file name or command contains spaces it must be quoted. - This defaults to unset, which tells xpdf to generate a name of - the form .ps for a PDF file .pdf. - - fontDir dir - See the description above, in the DISPLAY FONTS section. - - () - -2 EXT_CONTRO - - textEncoding encoding-name - Sets the encoding to use for text output. (This can be overrid- - den with the "-enc" switch on the command line.) The encod- - ing-name must be defined with the unicodeMap command (see - above). This defaults to "Latin1". - - textEOL unix | dos | mac - Sets the end-of-line convention to use for text output. The - options are: - - unix = LF - dos = CR+LF - mac = CR - - (This can be overridden with the "-eol" switch on the command - line.) The default value is based on the OS where xpdf and - pdftotext were built. - - textPageBreaks yes | no - If set to "yes", text extraction will insert page breaks (form - feed characters) between pages. This defaults to "yes". - - textKeepTinyChars yes | no - If set to "yes", text extraction will keep all characters. If - set to "no", text extraction will discard tiny (smaller than 3 - point) characters after the first 50000 per page, avoiding - extremely slow run times for PDF files that use special fonts to - do shading or cross-hatching. This defaults to "no". - - () - -2 ISCELLANEOUS_SETTING - - initialZoom percentage | page | width - Sets the initial zoom factor. A number specifies a zoom per- - centage, where 100 means 72 dpi. You may also specify 'page', - to fit the page to the window size, or 'width', to fit the page - width to the window width. - - continuousView yes | no - If set to "yes", xpdf will start in continuous view mode, i.e., - with one vertical screoll bar for the whole document. This - defaults to "no". - - enableT1lib yes | no - Enables or disables use of t1lib (a Type 1 font rasterizer). - This is only relevant if the Xpdf tools were built with t1lib - support. ("enableT1lib" replaces the old "t1libControl" - option.) This option defaults to "yes". - - enableFreeType yes | no - Enables or disables use of FreeType (a TrueType / Type 1 font - rasterizer). This is only relevant if the Xpdf tools were built - with FreeType support. ("enableFreeType" replaces the old - "freetypeControl" option.) This option defaults to "yes". - - antialias yes | no - Enables or disables font anti-aliasing in the PDF rasterizer. - This option affects all font rasterizers. ("antialias" replaces - the anti-aliasing control provided by the old "t1libControl" and - "freetypeControl" options.) This default to "yes". - - vectorAntialias yes | no - Enables or disables anti-aliasing of vector graphics in the PDF - rasterizer. This defaults to "yes". - - strokeAdjust yes | no - Enables or disables stroke adjustment. Stroke adjustment moves - horizontal and vertical lines by up to half a pixel to make them - look "cleaner" when vector anti-aliasing is enabled. This - defaults to "yes". - - screenType dispersed | clustered | stochasticClustered - Sets the halftone screen type, which will be used when generat- - ing a monochrome (1-bit) bitmap. The three options are dis- - persed-dot dithering, clustered-dot dithering (with a round dot - and 45-degree screen angle), and stochastic clustered-dot - dithering. By default, "stochasticClustered" is used for reso- - lutions of 300 dpi and higher, and "dispersed" is used for reso- - lutions lower then 300 dpi. - - screenSize integer - Sets the size of the (square) halftone screen threshold matrix. - By default, this is 4 for dispersed-dot dithering, 10 for clus- - tered-dot dithering, and 100 for stochastic clustered-dot - dithering. - - screenDotRadius integer - Sets the halftone screen dot radius. This is only used when - screenType is set to stochasticClustered, and it defaults to 2. - In clustered-dot mode, the dot radius is half of the screen - size. Dispersed-dot dithering doesn't have a dot radius. - - screenGamma float - Sets the halftone screen gamma correction parameter. Gamma val- - ues greater than 1 make the output brighter; gamma values less - than 1 make it darker. The default value is 1. - - screenBlackThreshold float - When halftoning, all values below this threshold are forced to - solid black. This parameter is a floating point value between 0 - (black) and 1 (white). The default value is 0. - - screenWhiteThreshold float - When halftoning, all values above this threshold are forced to - solid white. This parameter is a floating point value between 0 - (black) and 1 (white). The default value is 1. - - drawAnnotations yes | no - If set to "no", annotations will not be drawn or printed. The - default value is "yes". - - overprintPreview yes | no - If set to "yes", generate overprint preview output, honoring the - OP/op/OPM settings in the PDF file. Ignored for non-CMYK out- - put. The default value is "no". - - launchCommand command - Sets the command executed when you click on a "launch"-type - link. The intent is for the command to be a program/script - which determines the file type and runs the appropriate viewer. - The command line will consist of the file to be launched, fol- - lowed by any parameters specified with the link. Do not use - "%s" in "command". By default, this is unset, and Xpdf will - simply try to execute the file (after prompting the user). - - urlCommand command - Sets the command executed when you click on a URL link. The - string "%s" will be replaced with the URL. (See the example - below.) This has no default value. - - movieCommand command - Sets the command executed when you click on a movie annotation. - The string "%s" will be replaced with the movie file name. This - has no default value. - - mapNumericCharNames yes | no - If set to "yes", the Xpdf tools will attempt to map various - numeric character names sometimes used in font subsets. In some - cases this leads to usable text, and in other cases it leads to - gibberish -- there is no way for Xpdf to tell. This defaults to - "yes". - - mapUnknownCharNames yes | no - If set to "yes", and mapNumericCharNames is set to "no", the - Xpdf tools will apply a simple pass-through mapping (Unicode - index = character code) for all unrecognized glyph names. (For - CID fonts, setting mapNumericCharNames to "no" is unnecessary.) - In some cases, this leads to usable text, and in other cases it - leads to gibberish -- there is no way for Xpdf to tell. This - defaults to "no". - - bind modifiers-key context command ... - Add a key or mouse button binding. Modifiers can be zero or - more of: - - shift- - ctrl- - alt- - - Key can be a regular ASCII character, or any one of: - - space - tab - return - enter - backspace - insert - delete - home - end - pgup - pgdn - left / right / up / down (arrow keys) - f1 .. f35 (function keys) - mousePress1 .. mousePress7 (mouse buttons) - mouseRelease1 .. mouseRelease7 (mouse buttons) - - Context is either "any" or a comma-separated combination of: - - fullScreen / window (full screen mode on/off) - continuous / singlePage (continuous mode on/off) - overLink / offLink (mouse over link or not) - scrLockOn / scrLockOff (scroll lock on/off) - - The context string can include only one of each pair in the - above list. - - Command is an Xpdf command (see the COMMANDS section of the - xpdf(1) man page for details). Multiple commands are separated - by whitespace. - - The bind command replaces any existing binding, but only if it - was defined for the exact same modifiers, key, and context. All - tokens (modifiers, key, context, commands) are case-sensitive. - - Example key bindings: - - # bind ctrl-a in any context to the nextPage - # command - bind ctrl-a any nextPage - - # bind uppercase B, when in continuous mode - # with scroll lock on, to the reload command - # followed by the prevPage command - bind B continuous,scrLockOn reload prevPage - - See the xpdf(1) man page for more examples. - - unbind modifiers-key context - Removes a key binding established with the bind command. This - is most useful to remove default key bindings before establish- - ing new ones (e.g., if the default key binding is given for - "any" context, and you want to create new key bindings for mul- - tiple contexts). - - printCommands yes | no - If set to "yes", drawing commands are printed as they're exe- - cuted (useful for debugging). This defaults to "no". - - errQuiet yes | no - If set to "yes", this suppresses all error and warning messages - from all of the Xpdf tools. This defaults to "no". - - () - -2 EXAMPLES - - The following is a sample xpdfrc file. - - # from the Thai support package - nameToUnicode /usr/local/share/xpdf/Thai.nameToUnicode - - # from the Japanese support package - cidToUnicode Adobe-Japan1 /usr/local/share/xpdf/Adobe-Japan1.cidToUnicode - unicodeMap JISX0208 /usr/local/share/xpdf/JISX0208.unicodeMap - cMapDir Adobe-Japan1 /usr/local/share/xpdf/cmap/Adobe-Japan1 - - # use the Base-14 Type 1 fonts from ghostscript - displayFontT1 Times-Roman /usr/local/share/ghostscript/fonts/n021003l.pfb - displayFontT1 Times-Italic /usr/local/share/ghostscript/fonts/n021023l.pfb - displayFontT1 Times-Bold /usr/local/share/ghostscript/fonts/n021004l.pfb - displayFontT1 Times-BoldItalic /usr/local/share/ghostscript/fonts/n021024l.pfb - displayFontT1 Helvetica /usr/local/share/ghostscript/fonts/n019003l.pfb - displayFontT1 Helvetica-Oblique /usr/local/share/ghostscript/fonts/n019023l.pfb - displayFontT1 Helvetica-Bold /usr/local/share/ghostscript/fonts/n019004l.pfb - displayFontT1 Helvetica-BoldOblique /usr/local/share/ghostscript/fonts/n019024l.pfb - displayFontT1 Courier /usr/local/share/ghostscript/fonts/n022003l.pfb - displayFontT1 Courier-Oblique /usr/local/share/ghostscript/fonts/n022023l.pfb - displayFontT1 Courier-Bold /usr/local/share/ghostscript/fonts/n022004l.pfb - displayFontT1 Courier-BoldOblique /usr/local/share/ghostscript/fonts/n022024l.pfb - displayFontT1 Symbol /usr/local/share/ghostscript/fonts/s050000l.pfb - displayFontT1 ZapfDingbats /usr/local/share/ghostscript/fonts/d050000l.pfb - - # use the Bakoma Type 1 fonts - # (this assumes they happen to be installed in /usr/local/fonts/bakoma) - fontDir /usr/local/fonts/bakoma - - # set some PostScript options - psPaperSize letter - psDuplex no - psLevel level2 - psEmbedType1Fonts yes - psEmbedTrueTypeFonts yes - psFile "| lpr -Pprinter5" - - # assume that the PostScript printer has the Univers and - # Univers-Bold fonts - psFont Univers Univers - psFont Univers-Bold Univers-Bold - - # set the text output options - textEncoding UTF-8 - textEOL unix - - # misc options - enableT1lib yes - enableFreeType yes - launchCommand viewer-script - urlCommand "netscape -remote 'openURL(%s)'" - - () - -2 FILES - - /usr/local/etc/xpdfrc - This is the default location for the system-wide configuration - file. Depending on build options, it may be placed elsewhere. - - $HOME/.xpdfrc - This is the user's configuration file. If it exists, it will be - read in place of the system-wide file. - - () - -2 AUTHOR - - The Xpdf software and documentation are copyright 1996-2007 Glyph & - Cog, LLC. - - () - -2 SEE_ALSO - - xpdf(1), pdftops(1), pdftotext(1), pdfinfo(1), pdftoppm(1), pdfim- - ages(1) - http://www.foolabs.com/xpdf/ - - () - diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiBase.cc b/thirdparty/xpdf/3.02/src/fofi/FoFiBase.cc deleted file mode 100644 index 4adef2a4..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiBase.cc +++ /dev/null @@ -1,175 +0,0 @@ -//======================================================================== -// -// FoFiBase.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.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"))) { - return NULL; - } - fseek(f, 0, SEEK_END); - n = (int)ftell(f); - if (n < 0) { - fclose(f); - return NULL; - } - fseek(f, 0, SEEK_SET); - 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 || pos > INT_MAX - 1) { - *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 || pos > INT_MAX - 1) { - *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 || pos > INT_MAX - 3) { - *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 || pos > INT_MAX - 3) { - *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::getU32LE(int pos, GBool *ok) { - Guint x; - - if (pos < 0 || pos+3 >= len || pos > INT_MAX - 3) { - *ok = gFalse; - return 0; - } - x = file[pos+3]; - x = (x << 8) + file[pos+2]; - x = (x << 8) + file[pos+1]; - x = (x << 8) + file[pos]; - return x; -} - -Guint FoFiBase::getUVarBE(int pos, int size, GBool *ok) { - Guint x; - int i; - - if (pos < 0 || pos + size > len || pos > INT_MAX - size) { - *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/thirdparty/xpdf/3.02/src/fofi/FoFiBase.h b/thirdparty/xpdf/3.02/src/fofi/FoFiBase.h deleted file mode 100644 index 2b36da39..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiBase.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================== -// -// FoFiBase.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFIBASE_H -#define FOFIBASE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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 getU32LE(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/thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.cc b/thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.cc deleted file mode 100644 index 37a17f5d..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.cc +++ /dev/null @@ -1,994 +0,0 @@ -//======================================================================== -// -// FoFiEncodings.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#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/thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.h b/thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.h deleted file mode 100644 index 50e285d7..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiEncodings.h +++ /dev/null @@ -1,36 +0,0 @@ -//======================================================================== -// -// FoFiEncodings.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFIENCODINGS_H -#define FOFIENCODINGS_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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/thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.cc b/thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.cc deleted file mode 100644 index 20b13f09..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.cc +++ /dev/null @@ -1,632 +0,0 @@ -//======================================================================== -// -// FoFiIdentifier.cc -// -// Copyright 2009 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "gtypes.h" -#include "FoFiIdentifier.h" - -//------------------------------------------------------------------------ - -class Reader { -public: - - virtual ~Reader() {} - - // Read one byte. Returns -1 if past EOF. - virtual int getByte(int pos) = 0; - - // Read a big-endian unsigned 16-bit integer. Fills in *val and - // returns true if successful. - virtual GBool getU16BE(int pos, int *val) = 0; - - // Read a big-endian unsigned 32-bit integer. Fills in *val and - // returns true if successful. - virtual GBool getU32BE(int pos, Guint *val) = 0; - - // Read a little-endian unsigned 32-bit integer. Fills in *val and - // returns true if successful. - virtual GBool getU32LE(int pos, Guint *val) = 0; - - // Read a big-endian unsigned -byte integer, where 1 <= size - // <= 4. Fills in *val and returns true if successful. - virtual GBool getUVarBE(int pos, int size, Guint *val) = 0; - - // Compare against a string. Returns true if equal. - virtual GBool cmp(int pos, char *s) = 0; - -}; - -//------------------------------------------------------------------------ - -class MemReader: public Reader { -public: - - static MemReader *make(char *bufA, int lenA); - virtual ~MemReader(); - virtual int getByte(int pos); - virtual GBool getU16BE(int pos, int *val); - virtual GBool getU32BE(int pos, Guint *val); - virtual GBool getU32LE(int pos, Guint *val); - virtual GBool getUVarBE(int pos, int size, Guint *val); - virtual GBool cmp(int pos, char *s); - -private: - - MemReader(char *bufA, int lenA); - - char *buf; - int len; -}; - -MemReader *MemReader::make(char *bufA, int lenA) { - return new MemReader(bufA, lenA); -} - -MemReader::MemReader(char *bufA, int lenA) { - buf = bufA; - len = lenA; -} - -MemReader::~MemReader() { -} - -int MemReader::getByte(int pos) { - if (pos < 0 || pos >= len) { - return -1; - } - return buf[pos] & 0xff; -} - -GBool MemReader::getU16BE(int pos, int *val) { - if (pos < 0 || pos > len - 2) { - return gFalse; - } - *val = ((buf[pos] & 0xff) << 8) + - (buf[pos+1] & 0xff); - return gTrue; -} - -GBool MemReader::getU32BE(int pos, Guint *val) { - if (pos < 0 || pos > len - 4) { - return gFalse; - } - *val = ((buf[pos] & 0xff) << 24) + - ((buf[pos+1] & 0xff) << 16) + - ((buf[pos+2] & 0xff) << 8) + - (buf[pos+3] & 0xff); - return gTrue; -} - -GBool MemReader::getU32LE(int pos, Guint *val) { - if (pos < 0 || pos > len - 4) { - return gFalse; - } - *val = (buf[pos] & 0xff) + - ((buf[pos+1] & 0xff) << 8) + - ((buf[pos+2] & 0xff) << 16) + - ((buf[pos+3] & 0xff) << 24); - return gTrue; -} - -GBool MemReader::getUVarBE(int pos, int size, Guint *val) { - int i; - - if (size < 1 || size > 4 || pos < 0 || pos > len - size) { - return gFalse; - } - *val = 0; - for (i = 0; i < size; ++i) { - *val = (*val << 8) + (buf[pos + i] & 0xff); - } - return gTrue; -} - -GBool MemReader::cmp(int pos, char *s) { - int n; - - n = strlen(s); - if (pos < 0 || len < n || pos > len - n) { - return gFalse; - } - return !memcmp(buf + pos, s, n); -} - -//------------------------------------------------------------------------ - -class FileReader: public Reader { -public: - - static FileReader *make(char *fileName); - virtual ~FileReader(); - virtual int getByte(int pos); - virtual GBool getU16BE(int pos, int *val); - virtual GBool getU32BE(int pos, Guint *val); - virtual GBool getU32LE(int pos, Guint *val); - virtual GBool getUVarBE(int pos, int size, Guint *val); - virtual GBool cmp(int pos, char *s); - -private: - - FileReader(FILE *fA); - GBool fillBuf(int pos, int len); - - FILE *f; - char buf[1024]; - int bufPos, bufLen; -}; - -FileReader *FileReader::make(char *fileName) { - FILE *fA; - - if (!(fA = fopen(fileName, "rb"))) { - return NULL; - } - return new FileReader(fA); -} - -FileReader::FileReader(FILE *fA) { - f = fA; - bufPos = 0; - bufLen = 0; -} - -FileReader::~FileReader() { - fclose(f); -} - -int FileReader::getByte(int pos) { - if (!fillBuf(pos, 1)) { - return -1; - } - return buf[pos - bufPos] & 0xff; -} - -GBool FileReader::getU16BE(int pos, int *val) { - if (!fillBuf(pos, 2)) { - return gFalse; - } - *val = ((buf[pos - bufPos] & 0xff) << 8) + - (buf[pos - bufPos + 1] & 0xff); - return gTrue; -} - -GBool FileReader::getU32BE(int pos, Guint *val) { - if (!fillBuf(pos, 4)) { - return gFalse; - } - *val = ((buf[pos - bufPos] & 0xff) << 24) + - ((buf[pos - bufPos + 1] & 0xff) << 16) + - ((buf[pos - bufPos + 2] & 0xff) << 8) + - (buf[pos - bufPos + 3] & 0xff); - return gTrue; -} - -GBool FileReader::getU32LE(int pos, Guint *val) { - if (!fillBuf(pos, 4)) { - return gFalse; - } - *val = (buf[pos - bufPos] & 0xff) + - ((buf[pos - bufPos + 1] & 0xff) << 8) + - ((buf[pos - bufPos + 2] & 0xff) << 16) + - ((buf[pos - bufPos + 3] & 0xff) << 24); - return gTrue; -} - -GBool FileReader::getUVarBE(int pos, int size, Guint *val) { - int i; - - if (size < 1 || size > 4 || !fillBuf(pos, size)) { - return gFalse; - } - *val = 0; - for (i = 0; i < size; ++i) { - *val = (*val << 8) + (buf[pos - bufPos + i] & 0xff); - } - return gTrue; -} - -GBool FileReader::cmp(int pos, char *s) { - int n; - - n = strlen(s); - if (!fillBuf(pos, n)) { - return gFalse; - } - return !memcmp(buf - bufPos + pos, s, n); -} - -GBool FileReader::fillBuf(int pos, int len) { - if (pos < 0 || len < 0 || len > (int)sizeof(buf) || - pos > INT_MAX - (int)sizeof(buf)) { - return gFalse; - } - if (pos >= bufPos && pos + len <= bufPos + bufLen) { - return gTrue; - } - if (fseek(f, pos, SEEK_SET)) { - return gFalse; - } - bufPos = pos; - bufLen = (int)fread(buf, 1, sizeof(buf), f); - if (bufLen < len) { - return gFalse; - } - return gTrue; -} - -//------------------------------------------------------------------------ - -class StreamReader: public Reader { -public: - - static StreamReader *make(int (*getCharA)(void *data), void *dataA); - virtual ~StreamReader(); - virtual int getByte(int pos); - virtual GBool getU16BE(int pos, int *val); - virtual GBool getU32BE(int pos, Guint *val); - virtual GBool getU32LE(int pos, Guint *val); - virtual GBool getUVarBE(int pos, int size, Guint *val); - virtual GBool cmp(int pos, char *s); - -private: - - StreamReader(int (*getCharA)(void *data), void *dataA); - GBool fillBuf(int pos, int len); - - int (*getChar)(void *data); - void *data; - int streamPos; - char buf[1024]; - int bufPos, bufLen; -}; - -StreamReader *StreamReader::make(int (*getCharA)(void *data), void *dataA) { - return new StreamReader(getCharA, dataA); -} - -StreamReader::StreamReader(int (*getCharA)(void *data), void *dataA) { - getChar = getCharA; - data = dataA; - streamPos = 0; - bufPos = 0; - bufLen = 0; -} - -StreamReader::~StreamReader() { -} - -int StreamReader::getByte(int pos) { - if (!fillBuf(pos, 1)) { - return -1; - } - return buf[pos - bufPos] & 0xff; -} - -GBool StreamReader::getU16BE(int pos, int *val) { - if (!fillBuf(pos, 2)) { - return gFalse; - } - *val = ((buf[pos - bufPos] & 0xff) << 8) + - (buf[pos - bufPos + 1] & 0xff); - return gTrue; -} - -GBool StreamReader::getU32BE(int pos, Guint *val) { - if (!fillBuf(pos, 4)) { - return gFalse; - } - *val = ((buf[pos - bufPos] & 0xff) << 24) + - ((buf[pos - bufPos + 1] & 0xff) << 16) + - ((buf[pos - bufPos + 2] & 0xff) << 8) + - (buf[pos - bufPos + 3] & 0xff); - return gTrue; -} - -GBool StreamReader::getU32LE(int pos, Guint *val) { - if (!fillBuf(pos, 4)) { - return gFalse; - } - *val = (buf[pos - bufPos] & 0xff) + - ((buf[pos - bufPos + 1] & 0xff) << 8) + - ((buf[pos - bufPos + 2] & 0xff) << 16) + - ((buf[pos - bufPos + 3] & 0xff) << 24); - return gTrue; -} - -GBool StreamReader::getUVarBE(int pos, int size, Guint *val) { - int i; - - if (size < 1 || size > 4 || !fillBuf(pos, size)) { - return gFalse; - } - *val = 0; - for (i = 0; i < size; ++i) { - *val = (*val << 8) + (buf[pos - bufPos + i] & 0xff); - } - return gTrue; -} - -GBool StreamReader::cmp(int pos, char *s) { - int n; - - n = strlen(s); - if (!fillBuf(pos, n)) { - return gFalse; - } - return !memcmp(buf - bufPos + pos, s, n); -} - -GBool StreamReader::fillBuf(int pos, int len) { - int c; - - if (pos < 0 || len < 0 || len > (int)sizeof(buf) || - pos > INT_MAX - (int)sizeof(buf)) { - return gFalse; - } - if (pos < bufPos) { - return gFalse; - } - - // if requested region will not fit in the current buffer... - if (pos + len > bufPos + (int)sizeof(buf)) { - - // if the start of the requested data is already in the buffer, move - // it to the start of the buffer - if (pos < bufPos + bufLen) { - bufLen -= pos - bufPos; - memmove(buf, buf + (pos - bufPos), bufLen); - bufPos = pos; - - // otherwise discard data from the - // stream until we get to the requested position - } else { - bufPos += bufLen; - bufLen = 0; - while (bufPos < pos) { - if ((c = (*getChar)(data)) < 0) { - return gFalse; - } - ++bufPos; - } - } - } - - // read the rest of the requested data - while (bufPos + bufLen < pos + len) { - if ((c = (*getChar)(data)) < 0) { - return gFalse; - } - buf[bufLen++] = (char)c; - } - - return gTrue; -} - -//------------------------------------------------------------------------ - -static FoFiIdentifierType identify(Reader *reader); -static FoFiIdentifierType identifyOpenType(Reader *reader); -static FoFiIdentifierType identifyCFF(Reader *reader, int start); - -FoFiIdentifierType FoFiIdentifier::identifyMem(char *file, int len) { - MemReader *reader; - FoFiIdentifierType type; - - if (!(reader = MemReader::make(file, len))) { - return fofiIdError; - } - type = identify(reader); - delete reader; - return type; -} - -FoFiIdentifierType FoFiIdentifier::identifyFile(char *fileName) { - FileReader *reader; - FoFiIdentifierType type; - - if (!(reader = FileReader::make(fileName))) { - return fofiIdError; - } - type = identify(reader); - delete reader; - return type; -} - -FoFiIdentifierType FoFiIdentifier::identifyStream(int (*getChar)(void *data), - void *data) { - StreamReader *reader; - FoFiIdentifierType type; - - if (!(reader = StreamReader::make(getChar, data))) { - return fofiIdError; - } - type = identify(reader); - delete reader; - return type; -} - -static FoFiIdentifierType identify(Reader *reader) { - Guint n; - - //----- PFA - if (reader->cmp(0, "%!PS-AdobeFont-1") || - reader->cmp(0, "%!FontType1")) { - return fofiIdType1PFA; - } - - //----- PFB - if (reader->getByte(0) == 0x80 && - reader->getByte(1) == 0x01 && - reader->getU32LE(2, &n)) { - if ((n >= 16 && reader->cmp(6, "%!PS-AdobeFont-1")) || - (n >= 11 && reader->cmp(6, "%!FontType1"))) { - return fofiIdType1PFB; - } - } - - //----- TrueType - if ((reader->getByte(0) == 0x00 && - reader->getByte(1) == 0x01 && - reader->getByte(2) == 0x00 && - reader->getByte(3) == 0x00) || - (reader->getByte(0) == 0x74 && // 'true' - reader->getByte(1) == 0x72 && - reader->getByte(2) == 0x75 && - reader->getByte(3) == 0x65)) { - return fofiIdTrueType; - } - if (reader->getByte(0) == 0x74 && // 'ttcf' - reader->getByte(1) == 0x74 && - reader->getByte(2) == 0x63 && - reader->getByte(3) == 0x66) { - return fofiIdTrueTypeCollection; - } - - //----- OpenType - if (reader->getByte(0) == 0x4f && // 'OTTO - reader->getByte(1) == 0x54 && - reader->getByte(2) == 0x54 && - reader->getByte(3) == 0x4f) { - return identifyOpenType(reader); - } - - //----- CFF - if (reader->getByte(0) == 0x01 && - reader->getByte(1) == 0x00) { - return identifyCFF(reader, 0); - } - // some tools embed CFF fonts with an extra whitespace char at the - // beginning - if (reader->getByte(1) == 0x01 && - reader->getByte(2) == 0x00) { - return identifyCFF(reader, 1); - } - - return fofiIdUnknown; -} - -static FoFiIdentifierType identifyOpenType(Reader *reader) { - FoFiIdentifierType type; - Guint offset; - int nTables, i; - - if (!reader->getU16BE(4, &nTables)) { - return fofiIdUnknown; - } - for (i = 0; i < nTables; ++i) { - if (reader->cmp(12 + i*16, "CFF ")) { - if (reader->getU32BE(12 + i*16 + 8, &offset) && - offset < (Guint)INT_MAX) { - type = identifyCFF(reader, (int)offset); - if (type == fofiIdCFF8Bit) { - type = fofiIdOpenTypeCFF8Bit; - } else if (type == fofiIdCFFCID) { - type = fofiIdOpenTypeCFFCID; - } - return type; - } - return fofiIdUnknown; - } - } - return fofiIdUnknown; -} - -static FoFiIdentifierType identifyCFF(Reader *reader, int start) { - Guint offset0, offset1; - int hdrSize, offSize0, offSize1, pos, endPos, b0, n, i; - - //----- read the header - if (reader->getByte(start) != 0x01 || - reader->getByte(start + 1) != 0x00) { - return fofiIdUnknown; - } - if ((hdrSize = reader->getByte(start + 2)) < 0) { - return fofiIdUnknown; - } - if ((offSize0 = reader->getByte(start + 3)) < 1 || offSize0 > 4) { - return fofiIdUnknown; - } - pos = start + hdrSize; - if (pos < 0) { - return fofiIdUnknown; - } - - //----- skip the name index - if (!reader->getU16BE(pos, &n)) { - return fofiIdUnknown; - } - if (n == 0) { - pos += 2; - } else { - if ((offSize1 = reader->getByte(pos + 2)) < 1 || offSize1 > 4) { - return fofiIdUnknown; - } - if (!reader->getUVarBE(pos + 3 + n * offSize1, offSize1, &offset1) || - offset1 > (Guint)INT_MAX) { - return fofiIdUnknown; - } - pos += 3 + (n + 1) * offSize1 + (int)offset1 - 1; - } - if (pos < 0) { - return fofiIdUnknown; - } - - //----- parse the top dict index - if (!reader->getU16BE(pos, &n) || n < 1) { - return fofiIdUnknown; - } - if ((offSize1 = reader->getByte(pos + 2)) < 1 || offSize1 > 4) { - return fofiIdUnknown; - } - if (!reader->getUVarBE(pos + 3, offSize1, &offset0) || - offset0 > (Guint)INT_MAX || - !reader->getUVarBE(pos + 3 + offSize1, offSize1, &offset1) || - offset1 > (Guint)INT_MAX || - offset0 > offset1) { - return fofiIdUnknown; - } - pos = pos + 3 + (n + 1) * offSize1 + (int)offset0 - 1; - endPos = pos + 3 + (n + 1) * offSize1 + (int)offset1 - 1; - if (pos < 0 || endPos < 0 || pos > endPos) { - return fofiIdUnknown; - } - - //----- parse the top dict, look for ROS as first entry - // for a CID font, the top dict starts with: - // ROS - for (i = 0; i < 3; ++i) { - b0 = reader->getByte(pos++); - if (b0 == 0x1c) { - pos += 2; - } else if (b0 == 0x1d) { - pos += 4; - } else if (b0 >= 0xf7 && b0 <= 0xfe) { - pos += 1; - } else if (b0 < 0x20 || b0 > 0xf6) { - return fofiIdCFF8Bit; - } - if (pos >= endPos || pos < 0) { - return fofiIdCFF8Bit; - } - } - if (pos + 1 < endPos && - reader->getByte(pos) == 12 && - reader->getByte(pos + 1) == 30) { - return fofiIdCFFCID; - } else { - return fofiIdCFF8Bit; - } -} diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.h b/thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.h deleted file mode 100644 index 79da845a..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiIdentifier.h +++ /dev/null @@ -1,44 +0,0 @@ -//======================================================================== -// -// FoFiIdentifier.h -// -// Copyright 2009 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFIIDENTIFIER_H -#define FOFIIDENTIFIER_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -//------------------------------------------------------------------------ -// FoFiIdentifier -//------------------------------------------------------------------------ - -enum FoFiIdentifierType { - fofiIdType1PFA, // Type 1 font in PFA format - fofiIdType1PFB, // Type 1 font in PFB format - fofiIdCFF8Bit, // 8-bit CFF font - fofiIdCFFCID, // CID CFF font - fofiIdTrueType, // TrueType font - fofiIdTrueTypeCollection, // TrueType collection - fofiIdOpenTypeCFF8Bit, // OpenType wrapper with 8-bit CFF font - fofiIdOpenTypeCFFCID, // OpenType wrapper with CID CFF font - fofiIdUnknown, // unknown type - fofiIdError // error in reading the file -}; - -class FoFiIdentifier { -public: - - static FoFiIdentifierType identifyMem(char *file, int len); - static FoFiIdentifierType identifyFile(char *fileName); - static FoFiIdentifierType identifyStream(int (*getChar)(void *data), - void *data); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.cc b/thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.cc deleted file mode 100644 index ce5d92ba..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.cc +++ /dev/null @@ -1,2092 +0,0 @@ -//======================================================================== -// -// FoFiTrueType.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gtypes.h" -#include "gmem.h" -#include "GString.h" -#include "GHash.h" -#include "FoFiType1C.h" -#include "FoFiTrueType.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 - -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) { - FoFiTrueType *ff; - - ff = new FoFiTrueType(fileA, lenA, gFalse); - if (!ff->parsedOk) { - delete ff; - return NULL; - } - return ff; -} - -FoFiTrueType *FoFiTrueType::load(char *fileName) { - FoFiTrueType *ff; - char *fileA; - int lenA; - - if (!(fileA = FoFiBase::readFile(fileName, &lenA))) { - return NULL; - } - ff = new FoFiTrueType(fileA, lenA, gTrue); - if (!ff->parsedOk) { - delete ff; - return NULL; - } - return ff; -} - -FoFiTrueType::FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA): - FoFiBase(fileA, lenA, freeFileDataA) -{ - tables = NULL; - nTables = 0; - cmaps = NULL; - nCmaps = 0; - nameToGID = NULL; - parsedOk = gFalse; - - 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; -} - -int FoFiTrueType::mapCodeToGID(int i, int c) { - int gid; - int segCnt, segEnd, segStart, segDelta, segOffset; - int 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 < 0 || c >= cmaps[i].len - 6) { - 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; - default: - return 0; - } - if (!ok) { - return 0; - } - return gid; -} - -int FoFiTrueType::mapNameToGID(char *name) { - if (!nameToGID) { - return 0; - } - return nameToGID->lookupInt(name); -} - -int *FoFiTrueType::getCIDToGIDMap(int *nCIDs) { - FoFiType1C *ff; - int *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::getFontMatrix(double *mat) { - 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->getFontMatrix(mat); - delete ff; -} - -void FoFiTrueType::convertToType42(char *psName, char **encoding, - int *codeToGID, - FoFiOutputFunc outputFunc, - void *outputStream) { - GString *buf; - GBool ok; - - if (openTypeCFF) { - return; - } - - // write the header - ok = gTrue; - buf = GString::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 = GString::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, - int *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, - void *outputStream) { - GString *buf; - int cid; - GBool ok; - int i, j, k; - - if (openTypeCFF) { - return; - } - - // write the header - ok = gTrue; - buf = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::format(" {0:d} string 0 1 {1:d} {{\n", 2 * j, j - 1); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GString::format(" 2 copy dup 2 mul exch {0:d} add -8 bitshift put\n", - i); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GString::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 = GString::format("/CIDMap {0:d} string\n", 2 * nGlyphs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GString::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 = GString::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, int *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, - void *outputStream) { - GString *buf; - GString *sfntsName; - int n, i, j; - - if (openTypeCFF) { - return; - } - - // write the Type 42 sfnts array - sfntsName = (new GString(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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::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, - int *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, nBogusTables; - 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; - } - - // 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 and bogus tags - nZeroLengthTables = nBogusTables = 0; - for (i = 0; i < nTables; ++i) { - if (tables[i].len == 0) { - ++nZeroLengthTables; - if (tables[i].tag == cmapTag) { - missingCmap = gTrue; - } else if (tables[i].tag == nameTag) { - missingName = gTrue; - } else if (tables[i].tag == postTag) { - missingPost = gTrue; - } else if (tables[i].tag == os2Tag) { - missingOS2 = gTrue; - } - } else if (!(tables[i].tag & 0xe0000000) || - !(tables[i].tag & 0x00e00000) || - !(tables[i].tag & 0x0000e000) || - !(tables[i].tag & 0x000000e0)) { - // tags where any of the bytes are < 0x20 are probably bogus - // (the TrueType spec uses ASCII sequences for tags) -- this - // catches problems where the number of tables given in the - // header is too large, and so gibberish data is read at the end - // of the table directory - ++nBogusTables; - } - } - - // check for an incorrect cmap table length - badCmapLen = gFalse; - cmapLen = 0; // make gcc happy - if (!missingCmap) { - 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 && nBogusTables == 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); - // if the last entry in the loca is not the max offset (size of - // the glyf table), something is wrong -- work around the problem - // by forcing the last sorted entry to have a zero length - locaTable[nGlyphs].len = 0; - 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) { - if (codeToGID[i] < 0) { - //~ this may not be correct - we want this character to never be - //~ displayed, but mapping it to the notdef glyph may result in - //~ little boxes being displayed - newCmapTab[44 + 2*i] = 0; - newCmapTab[44 + 2*i + 1] = 0; - } else { - 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 - nBogusTables + - (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 && - (tables[i].tag & 0xe0000000) && - (tables[i].tag & 0x00e00000) && - (tables[i].tag & 0x0000e000) && - (tables[i].tag & 0x000000e0)) { - newTables[j] = tables[i]; - newTables[j].origOffset = tables[i].offset; - if (checkRegion(tables[i].offset, tables[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; - GString *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 = GString::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 = GString::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, - int *codeToGID, - FoFiOutputFunc outputFunc, - void *outputStream) { - char *name; - GString *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 = GString::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, GString *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 glyfTableLen, 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"); - 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, 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) - locaTable = (TrueTypeLoca *)gmallocn(nGlyphs + 1, sizeof(TrueTypeLoca)); - i = seekTable("loca"); - pos = tables[i].offset; - i = seekTable("glyf"); - glyfTableLen = tables[i].len; - 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); - } - if (locaTable[i].origOffset > glyfTableLen) { - locaTable[i].origOffset = glyfTableLen; - } - } - 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) * 2; - 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); - } - } - } - } - - // end the sfnts array - (*outputFunc)(outputStream, "] def\n", 6); - - gfree(locaData); - gfree(locaTable); - if (vmtxTab) { - gfree(vmtxTab); - } -} - -void FoFiTrueType::dumpString(Guchar *s, int length, - FoFiOutputFunc outputFunc, - void *outputStream) { - GString *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 = GString::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) { - pos = getU32BE(12, &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; - j = 0; - for (i = 0; i < nTables; ++i) { - tables[j].tag = getU32BE(pos, &parsedOk); - tables[j].checksum = getU32BE(pos + 4, &parsedOk); - tables[j].offset = (int)getU32BE(pos + 8, &parsedOk); - tables[j].len = (int)getU32BE(pos + 12, &parsedOk); - if (tables[j].offset + tables[j].len >= tables[j].offset && - tables[j].offset + tables[j].len <= len) { - // ignore any bogus entries in the table directory - ++j; - } - pos += 16; - } - nTables = j; - if (!parsedOk) { - 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() { - GString *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 GHash(gTrue); - for (i = 0; i < 258; ++i) { - nameToGID->add(new GString(macGlyphNames[i]), i); - } - } else if (postFmt == 0x00020000) { - nameToGID = new GHash(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 GString(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 GString((char *)&file[stringPos + 1], m); - nameToGID->removeInt(name); - nameToGID->add(name, i); - ++stringIdx; - stringPos += 1 + m; - } - } - } else if (postFmt == 0x00028000) { - nameToGID = new GHash(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 GString(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; -} diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.h b/thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.h deleted file mode 100644 index 1dfe9ff6..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiTrueType.h +++ /dev/null @@ -1,178 +0,0 @@ -//======================================================================== -// -// FoFiTrueType.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFITRUETYPE_H -#define FOFITRUETYPE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "FoFiBase.h" - -class GString; -class GHash; -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); - - // Create a FoFiTrueType object from a file on disk. - static FoFiTrueType *load(char *fileName); - - 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 th cmap. - int getCmapPlatform(int i); - - // Return the encoding ID of the th cmap. - int getCmapEncoding(int i); - - // Return the index of the cmap for , . Returns - // -1 if there is no corresponding cmap. - int findCmap(int platform, int encoding); - - // Return the GID corresponding to according to the th cmap. - int mapCodeToGID(int i, int c); - - // Returns the GID corresponding to according to the post - // table. Returns 0 if there is no mapping for 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 *. This is only useful for CID fonts. (Only - // useful for OpenType CFF fonts.) - int *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(); - - // Return the font matrix as an array of six numbers. (Only useful - // for OpenType CFF fonts.) - void getFontMatrix(double *mat); - - // Convert to a Type 42 font, suitable for embedding in a PostScript - // file. will be used as the PostScript font name (so we - // don't need to depend on the 'name' table in the font). The - // array specifies the mapping from char codes to names. - // If is NULL, the encoding is unknown or undefined. The - // array specifies the mapping from char codes to GIDs. - // (Not useful for OpenType CFF fonts.) - void convertToType42(char *psName, char **encoding, - int *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 is - // not NULL, it will be used in place of the encoding in the Type 1C - // font. If is true the eexec section will be hex-encoded, - // otherwise it will be left as binary data. If 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. will be used as the PostScript font - // name (so we don't need to depend on the 'name' table in the - // font). The array maps CIDs to GIDs; it has - // entries. (Not useful for OpenType CFF fonts.) - void convertToCIDType2(char *psName, int *cidMap, int nCIDs, - GBool needVerticalMetrics, - FoFiOutputFunc outputFunc, void *outputStream); - - // Convert to a Type 0 CIDFont, suitable for embedding in a - // PostScript file. 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. will be used as the - // PostScript font name (so we don't need to depend on the 'name' - // table in the font). The array maps CIDs to GIDs; it has - // entries. (Not useful for OpenType CFF fonts.) - void convertToType0(char *psName, int *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. 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 is non-NULL, the font is renamed - // to . If is non-NULL, the font is re-encoded, - // using a Windows Unicode cmap. If 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, int *codeToGID = NULL); - -private: - - FoFiTrueType(char *fileA, int lenA, GBool freeFileDataA); - void cvtEncoding(char **encoding, - FoFiOutputFunc outputFunc, - void *outputStream); - void cvtCharStrings(char **encoding, - int *codeToGID, - FoFiOutputFunc outputFunc, - void *outputStream); - void cvtSfnts(FoFiOutputFunc outputFunc, - void *outputStream, GString *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); - - TrueTypeTable *tables; - int nTables; - TrueTypeCmap *cmaps; - int nCmaps; - int nGlyphs; - int locaFmt; - int bbox[4]; - GHash *nameToGID; - GBool openTypeCFF; - - GBool parsedOk; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiType1.cc b/thirdparty/xpdf/3.02/src/fofi/FoFiType1.cc deleted file mode 100644 index 33da02ec..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiType1.cc +++ /dev/null @@ -1,338 +0,0 @@ -//======================================================================== -// -// FoFiType1.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "FoFiEncodings.h" -#include "FoFiType1.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; - fontMatrix[0] = 0.001; - fontMatrix[1] = 0; - fontMatrix[2] = 0; - fontMatrix[3] = 0.001; - fontMatrix[4] = 0; - fontMatrix[5] = 0; - parsed = gFalse; - undoPFB(); -} - -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::getFontMatrix(double *mat) { - int i; - - if (!parsed) { - parse(); - } - for (i = 0; i < 6; ++i) { - mat[i] = fontMatrix[i]; - } -} - -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, base, i, j; - GBool gotMatrix; - - gotMatrix = gFalse; - 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(p+1, " \t\n\r"))) { - 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) { - n = 255; - } - strncpy(buf, line, n); - buf[n] = '\0'; - for (p = buf; *p == ' ' || *p == '\t'; ++p) ; - if (!strncmp(p, "dup", 3)) { - while (1) { - p += 3; - for (; *p == ' ' || *p == '\t'; ++p) ; - code = 0; - if (*p == '8' && p[1] == '#') { - base = 8; - p += 2; - } else if (*p >= '0' && *p <= '9') { - base = 10; - } else { - break; - } - for (; *p >= '0' && *p < '0' + base; ++p) { - code = code * base + (*p - '0'); - } - for (; *p == ' ' || *p == '\t'; ++p) ; - if (*p != '/') { - break; - } - ++p; - for (p2 = p; *p2 && *p2 != ' ' && *p2 != '\t'; ++p2) ; - if (code < 256) { - c = *p2; - *p2 = '\0'; - encoding[code] = copyString(p); - *p2 = c; - } - for (p = p2; *p == ' ' || *p == '\t'; ++p) ; - if (strncmp(p, "put", 3)) { - break; - } - for (p += 3; *p == ' ' || *p == '\t'; ++p) ; - if (strncmp(p, "dup", 3)) { - break; - } - } - } else { - if (strtok(buf, " \t") && - (p = strtok(NULL, " \t\n\r")) && !strcmp(p, "def")) { - break; - } - } - } - //~ check for getinterval/putinterval junk - - } else if (!gotMatrix && !strncmp(line, "/FontMatrix", 11)) { - strncpy(buf, line + 11, 255); - buf[255] = '\0'; - if ((p = strchr(buf, '['))) { - ++p; - if ((p2 = strchr(p, ']'))) { - *p2 = '\0'; - for (j = 0; j < 6; ++j) { - if ((p = strtok(j == 0 ? p : NULL, " \t\n\r"))) { - fontMatrix[j] = atof(p); - } else { - break; - } - } - } - } - gotMatrix = gTrue; - - } else { - line = getNextLine(line); - } - } - - parsed = gTrue; -} - -// Undo the PFB encoding, i.e., remove the PFB headers. -void FoFiType1::undoPFB() { - GBool ok; - Guchar *file2; - int pos1, pos2, type; - Guint segLen; - - ok = gTrue; - if (getU8(0, &ok) != 0x80 || !ok) { - return; - } - file2 = (Guchar *)gmalloc(len); - pos1 = pos2 = 0; - while (getU8(pos1, &ok) == 0x80 && ok) { - type = getU8(pos1 + 1, &ok); - if (type < 1 || type > 2 || !ok) { - break; - } - segLen = getU32LE(pos1 + 2, &ok); - pos1 += 6; - if (!ok || !checkRegion(pos1, segLen)) { - break; - } - memcpy(file2 + pos2, file + pos1, segLen); - pos1 += segLen; - pos2 += segLen; - } - if (freeFileData) { - gfree(fileData); - } - file = fileData = file2; - freeFileData = gTrue; - len = pos2; -} diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiType1.h b/thirdparty/xpdf/3.02/src/fofi/FoFiType1.h deleted file mode 100644 index 776de3d0..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiType1.h +++ /dev/null @@ -1,64 +0,0 @@ -//======================================================================== -// -// FoFiType1.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFITYPE1_H -#define FOFITYPE1_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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(); - - // Return the font matrix as an array of six numbers. - void getFontMatrix(double *mat); - - // 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(); - void undoPFB(); - - char *name; - char **encoding; - double fontMatrix[6]; - GBool parsed; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/fofi/FoFiType1C.cc b/thirdparty/xpdf/3.02/src/fofi/FoFiType1C.cc deleted file mode 100644 index 17bd2171..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiType1C.cc +++ /dev/null @@ -1,2668 +0,0 @@ -//======================================================================== -// -// FoFiType1C.cc -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "gmem.h" -#include "GString.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; -} - -int *FoFiType1C::getCIDToGIDMap(int *nCIDs) { - int *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 = (int *)gmallocn(n, sizeof(int)); - memset(map, 0, n * sizeof(int)); - for (i = 0; i < nGlyphs; ++i) { - map[charset[i]] = i; - } - *nCIDs = n; - return map; -} - -void FoFiType1C::getFontMatrix(double *mat) { - int i; - - if (topDict.firstOp == 0x0c1e && privateDicts[0].hasFontMatrix) { - if (topDict.hasFontMatrix) { - mat[0] = topDict.fontMatrix[0] * privateDicts[0].fontMatrix[0] + - topDict.fontMatrix[1] * privateDicts[0].fontMatrix[2]; - mat[1] = topDict.fontMatrix[0] * privateDicts[0].fontMatrix[1] + - topDict.fontMatrix[1] * privateDicts[0].fontMatrix[3]; - mat[2] = topDict.fontMatrix[2] * privateDicts[0].fontMatrix[0] + - topDict.fontMatrix[3] * privateDicts[0].fontMatrix[2]; - mat[3] = topDict.fontMatrix[2] * privateDicts[0].fontMatrix[1] + - topDict.fontMatrix[3] * privateDicts[0].fontMatrix[3]; - mat[4] = topDict.fontMatrix[4] * privateDicts[0].fontMatrix[0] + - topDict.fontMatrix[5] * privateDicts[0].fontMatrix[2]; - mat[5] = topDict.fontMatrix[4] * privateDicts[0].fontMatrix[1] + - topDict.fontMatrix[5] * privateDicts[0].fontMatrix[3]; - } else { - for (i = 0; i < 6; ++i) { - mat[i] = privateDicts[0].fontMatrix[i]; - } - } - } else { - for (i = 0; i < 6; ++i) { - mat[i] = topDict.fontMatrix[i]; - } - } -} - -void FoFiType1C::convertToType1(char *psName, char **newEncoding, GBool ascii, - FoFiOutputFunc outputFunc, - void *outputStream) { - int psNameLen; - Type1CEexecBuf eb; - Type1CIndex subrIdx; - Type1CIndexVal val; - GString *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 ", 9); - writePSString(buf2, outputFunc, outputStream); - (*outputFunc)(outputStream, " readonly def\n", 14); - } - if (topDict.noticeSID != 0) { - getString(topDict.noticeSID, buf2, &ok); - (*outputFunc)(outputStream, "/Notice ", 8); - writePSString(buf2, outputFunc, outputStream); - (*outputFunc)(outputStream, " readonly def\n", 14); - } - if (topDict.copyrightSID != 0) { - getString(topDict.copyrightSID, buf2, &ok); - (*outputFunc)(outputStream, "/Copyright ", 11); - writePSString(buf2, outputFunc, outputStream); - (*outputFunc)(outputStream, " readonly def\n", 14); - } - if (topDict.fullNameSID != 0) { - getString(topDict.fullNameSID, buf2, &ok); - (*outputFunc)(outputStream, "/FullName ", 10); - writePSString(buf2, outputFunc, outputStream); - (*outputFunc)(outputStream, " readonly def\n", 14); - } - if (topDict.familyNameSID != 0) { - getString(topDict.familyNameSID, buf2, &ok); - (*outputFunc)(outputStream, "/FamilyName ", 12); - writePSString(buf2, outputFunc, outputStream); - (*outputFunc)(outputStream, " readonly def\n", 14); - } - if (topDict.weightSID != 0) { - getString(topDict.weightSID, buf2, &ok); - (*outputFunc)(outputStream, "/Weight ", 8); - writePSString(buf2, outputFunc, outputStream); - (*outputFunc)(outputStream, " readonly def\n", 14); - } - if (topDict.isFixedPitch) { - (*outputFunc)(outputStream, "/isFixedPitch true def\n", 23); - } else { - (*outputFunc)(outputStream, "/isFixedPitch false def\n", 24); - } - buf = GString::format("/ItalicAngle {0:.4g} def\n", topDict.italicAngle); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GString::format("/UnderlinePosition {0:.4g} def\n", - topDict.underlinePosition); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GString::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 = GString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FontType 1 def\n", 16); - buf = GString::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 = GString::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 = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - if (topDict.uniqueID != 0) { - buf = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::format("/BlueScale {0:.4g} def\n", - privateDicts[0].blueScale); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].blueShift != 7) { - buf = GString::format("/BlueShift {0:d} def\n", privateDicts[0].blueShift); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].blueFuzz != 1) { - buf = GString::format("/BlueFuzz {0:d} def\n", privateDicts[0].blueFuzz); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].hasStdHW) { - buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[0].stdHW); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].hasStdVW) { - buf = GString::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 = GString::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 = GString::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 = GString::format("/ForceBold {0:s} def\n", - privateDicts[0].forceBold ? "true" : "false"); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].forceBoldThreshold != 0) { - buf = GString::format("/ForceBoldThreshold {0:.4g} def\n", - privateDicts[0].forceBoldThreshold); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].languageGroup != 0) { - buf = GString::format("/LanguageGroup {0:d} def\n", - privateDicts[0].languageGroup); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[0].expansionFactor != 0.06) { - buf = GString::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 = GString::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; - GString *charStrings; - int *charStringOffsets; - Type1CIndex subrIdx; - Type1CIndexVal val; - int nCIDs, gdBytes; - GString *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 GString(); - 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 = GString::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 = GString::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 = GString::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 = GString::format("/CIDCount {0:d} def\n", nCIDs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - (*outputFunc)(outputStream, "/FDBytes 1 def\n", 15); - buf = GString::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 = GString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - buf = GString::format("/StrokeWidth {0:.4g} def\n", topDict.strokeWidth); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - - // FDArray entry - buf = GString::format("/FDArray {0:d} array\n", nFDs); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - for (i = 0; i < nFDs; ++i) { - buf = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::format("/BlueScale {0:.4g} def\n", - privateDicts[i].blueScale); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].blueShift != 7) { - buf = GString::format("/BlueShift {0:d} def\n", - privateDicts[i].blueShift); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].blueFuzz != 1) { - buf = GString::format("/BlueFuzz {0:d} def\n", privateDicts[i].blueFuzz); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].hasStdHW) { - buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[i].stdHW); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].hasStdVW) { - buf = GString::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 = GString::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 = GString::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 = GString::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 = GString::format("/ForceBoldThreshold {0:.4g} def\n", - privateDicts[i].forceBoldThreshold); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].languageGroup != 0) { - buf = GString::format("/LanguageGroup {0:d} def\n", - privateDicts[i].languageGroup); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (privateDicts[i].expansionFactor != 0.06) { - buf = GString::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 = GString::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 = GString::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 = GString::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; - GString *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; - 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 = GString::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 = GString::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 = GString::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 = GString::format("/PaintType {0:d} def\n", topDict.paintType); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - if (topDict.paintType != 0) { - buf = GString::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 = GString::format("dup {0:d} /c{1:02x} put\n", j, j); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - if (j < 256) { - buf = GString::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 = GString::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 = GString::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 = GString::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 = GString::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 = GString::format("/BlueScale {0:.4g} def\n", - privateDicts[fd].blueScale); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].blueShift != 7) { - buf = GString::format("/BlueShift {0:d} def\n", - privateDicts[fd].blueShift); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].blueFuzz != 1) { - buf = GString::format("/BlueFuzz {0:d} def\n", - privateDicts[fd].blueFuzz); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].hasStdHW) { - buf = GString::format("/StdHW [{0:.4g}] def\n", privateDicts[fd].stdHW); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].hasStdVW) { - buf = GString::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 = GString::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 = GString::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 = GString::format("/ForceBold {0:s} def\n", - privateDicts[fd].forceBold ? "true" : "false"); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].forceBoldThreshold != 0) { - buf = GString::format("/ForceBoldThreshold {0:.4g} def\n", - privateDicts[fd].forceBoldThreshold); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].languageGroup != 0) { - buf = GString::format("/LanguageGroup {0:d} def\n", - privateDicts[fd].languageGroup); - eexecWrite(&eb, buf->getCString()); - delete buf; - } - if (privateDicts[fd].expansionFactor != 0.06) { - buf = GString::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 = GString::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 = GString::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 = GString::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 = GString::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) { - GString *buf; - GString *charBuf; - - // generate the charstring - charBuf = new GString(); - cvtGlyph(offset, nBytes, charBuf, subrIdx, pDict, gTrue); - - buf = GString::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, GString *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, GString *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, GString *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); - } - } -} - -void FoFiType1C::writePSString(char *s, FoFiOutputFunc outputFunc, - void *outputStream) { - char buf[80]; - char *p; - int i, c; - - i = 0; - buf[i++] = '('; - for (p = s; *p; ++p) { - c = *p & 0xff; - if (c == '(' || c == ')' || c == '\\') { - buf[i++] = '\\'; - buf[i++] = c; - } else if (c < 0x20 || c >= 0x80) { - buf[i++] = '\\'; - buf[i++] = '0' + ((c >> 6) & 7); - buf[i++] = '0' + ((c >> 3) & 7); - buf[i++] = '0' + (c & 7); - } else { - buf[i++] = c; - } - if (i >= 64) { - buf[i++] = '\\'; - buf[i++] = '\n'; - (*outputFunc)(outputStream, buf, i); - i = 0; - } - } - buf[i++] = ')'; - (*outputFunc)(outputStream, buf, i); -} - -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 GString((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]; - GBool hasFontMatrix; - - hasFontMatrix = gFalse; - fontMatrix[0] = fontMatrix[1] = fontMatrix[2] = 0; // make gcc happy - fontMatrix[3] = fontMatrix[4] = fontMatrix[5] = 0; - 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 = atof(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 < 0) { - buf[0] = '\0'; - } else 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/thirdparty/xpdf/3.02/src/fofi/FoFiType1C.h b/thirdparty/xpdf/3.02/src/fofi/FoFiType1C.h deleted file mode 100644 index e4bc8198..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/FoFiType1C.h +++ /dev/null @@ -1,237 +0,0 @@ -//======================================================================== -// -// FoFiType1C.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FOFITYPE1C_H -#define FOFITYPE1C_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "FoFiBase.h" - -class GString; - -//------------------------------------------------------------------------ - -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 *. This is only useful for CID fonts. - int *getCIDToGIDMap(int *nCIDs); - - // Return the font matrix as an array of six numbers. - void getFontMatrix(double *mat); - - // Convert to a Type 1 font, suitable for embedding in a PostScript - // file. This is only useful with 8-bit fonts. If is - // not NULL, it will be used in place of the encoding in the Type 1C - // font. If is true the eexec section will be hex-encoded, - // otherwise it will be left as binary data. If 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. 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. 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, GString *charBuf, - Type1CIndex *subrIdx, Type1CPrivateDict *pDict, - GBool top); - void cvtGlyphWidth(GBool useOp, GString *charBuf, - Type1CPrivateDict *pDict); - void cvtNum(double x, GBool isFP, GString *charBuf); - void eexecWrite(Type1CEexecBuf *eb, char *s); - void eexecWriteCharstring(Type1CEexecBuf *eb, Guchar *s, int n); - void writePSString(char *s, FoFiOutputFunc outputFunc, void *outputStream); - 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); - - GString *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/thirdparty/xpdf/3.02/src/fofi/Makefile.dep b/thirdparty/xpdf/3.02/src/fofi/Makefile.dep deleted file mode 100644 index e69de29b..00000000 diff --git a/thirdparty/xpdf/3.02/src/fofi/Makefile.in b/thirdparty/xpdf/3.02/src/fofi/Makefile.in deleted file mode 100644 index f4f5d005..00000000 --- a/thirdparty/xpdf/3.02/src/fofi/Makefile.in +++ /dev/null @@ -1,71 +0,0 @@ -#======================================================================== -# -# FoFi library Makefile -# -# Copyright 2003 Glyph & Cog, LLC -# -#======================================================================== - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ - -GOOSRCDIR = $(srcdir)/../goo -GOOLIBDIR = ../goo - -CXXFLAGS = @CXXFLAGS@ @DEFS@ -I.. -I$(GOOSRCDIR) -I$(srcdir) - -CXX = @CXX@ -AR = @AR@ -RANLIB = @RANLIB@ - -LIBPREFIX = @LIBPREFIX@ - -#------------------------------------------------------------------------ - -.SUFFIXES: .cc - -.cc.o: - $(CXX) $(CXXFLAGS) -c $< - -#------------------------------------------------------------------------ - -CXX_SRC = \ - $(srcdir)/FoFiBase.cc \ - $(srcdir)/FoFiEncodings.cc \ - $(srcdir)/FoFiIdentifier.cc \ - $(srcdir)/FoFiTrueType.cc \ - $(srcdir)/FoFiType1.cc \ - $(srcdir)/FoFiType1C.cc - -#------------------------------------------------------------------------ - -all: $(LIBPREFIX)fofi.a - -#------------------------------------------------------------------------ - -FOFI_OBJS = \ - FoFiBase.o \ - FoFiEncodings.o \ - FoFiIdentifier.o \ - FoFiTrueType.o \ - FoFiType1.o \ - FoFiType1C.o - -$(LIBPREFIX)fofi.a: $(FOFI_OBJS) - rm -f $(LIBPREFIX)fofi.a - $(AR) $(LIBPREFIX)fofi.a $(FOFI_OBJS) - $(RANLIB) $(LIBPREFIX)fofi.a - -#------------------------------------------------------------------------ - -clean: - rm -f $(FOFI_OBJS) $(LIBPREFIX)fofi.a - -#------------------------------------------------------------------------ - -depend: - $(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >Makefile.dep - -include Makefile.dep diff --git a/thirdparty/xpdf/3.02/src/fofi/vms_make.com b/thirdparty/xpdf/3.02/src/fofi/vms_make.com deleted file mode 100644 index e69de29b..00000000 diff --git a/thirdparty/xpdf/3.02/src/goo/FixedPoint.cc b/thirdparty/xpdf/3.02/src/goo/FixedPoint.cc deleted file mode 100644 index 47c2834a..00000000 --- a/thirdparty/xpdf/3.02/src/goo/FixedPoint.cc +++ /dev/null @@ -1,118 +0,0 @@ -//======================================================================== -// -// FixedPoint.cc -// -// Fixed point type, with C++ operators. -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#if USE_FIXEDPOINT - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "FixedPoint.h" - -#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/thirdparty/xpdf/3.02/src/goo/FixedPoint.h b/thirdparty/xpdf/3.02/src/goo/FixedPoint.h deleted file mode 100644 index abcb2121..00000000 --- a/thirdparty/xpdf/3.02/src/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 - -#if USE_FIXEDPOINT - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include -#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/thirdparty/xpdf/3.02/src/goo/GHash.cc b/thirdparty/xpdf/3.02/src/goo/GHash.cc deleted file mode 100644 index b51a7643..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GHash.cc +++ /dev/null @@ -1,380 +0,0 @@ -//======================================================================== -// -// GHash.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "gmem.h" -#include "GString.h" -#include "GHash.h" - -//------------------------------------------------------------------------ - -struct GHashBucket { - GString *key; - union { - void *p; - int i; - } val; - GHashBucket *next; -}; - -struct GHashIter { - int h; - GHashBucket *p; -}; - -//------------------------------------------------------------------------ - -GHash::GHash(GBool deleteKeysA) { - int h; - - deleteKeys = deleteKeysA; - size = 7; - tab = (GHashBucket **)gmallocn(size, sizeof(GHashBucket *)); - for (h = 0; h < size; ++h) { - tab[h] = NULL; - } - len = 0; -} - -GHash::~GHash() { - GHashBucket *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 GHash::add(GString *key, void *val) { - GHashBucket *p; - int h; - - // expand the table if necessary - if (len >= size) { - expand(); - } - - // add the new symbol - p = new GHashBucket; - p->key = key; - p->val.p = val; - h = hash(key); - p->next = tab[h]; - tab[h] = p; - ++len; -} - -void GHash::add(GString *key, int val) { - GHashBucket *p; - int h; - - // expand the table if necessary - if (len >= size) { - expand(); - } - - // add the new symbol - p = new GHashBucket; - p->key = key; - p->val.i = val; - h = hash(key); - p->next = tab[h]; - tab[h] = p; - ++len; -} - -void GHash::replace(GString *key, void *val) { - GHashBucket *p; - int h; - - if ((p = find(key, &h))) { - p->val.p = val; - delete key; - } else { - add(key, val); - } -} - -void GHash::replace(GString *key, int val) { - GHashBucket *p; - int h; - - if ((p = find(key, &h))) { - p->val.i = val; - delete key; - } else { - add(key, val); - } -} - -void *GHash::lookup(GString *key) { - GHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return NULL; - } - return p->val.p; -} - -int GHash::lookupInt(GString *key) { - GHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return 0; - } - return p->val.i; -} - -void *GHash::lookup(char *key) { - GHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return NULL; - } - return p->val.p; -} - -int GHash::lookupInt(char *key) { - GHashBucket *p; - int h; - - if (!(p = find(key, &h))) { - return 0; - } - return p->val.i; -} - -void *GHash::remove(GString *key) { - GHashBucket *p; - GHashBucket **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 GHash::removeInt(GString *key) { - GHashBucket *p; - GHashBucket **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 *GHash::remove(char *key) { - GHashBucket *p; - GHashBucket **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 GHash::removeInt(char *key) { - GHashBucket *p; - GHashBucket **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 GHash::startIter(GHashIter **iter) { - *iter = new GHashIter; - (*iter)->h = -1; - (*iter)->p = NULL; -} - -GBool GHash::getNext(GHashIter **iter, GString **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 GHash::getNext(GHashIter **iter, GString **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 GHash::killIter(GHashIter **iter) { - delete *iter; - *iter = NULL; -} - -void GHash::expand() { - GHashBucket **oldTab; - GHashBucket *p; - int oldSize, h, i; - - oldSize = size; - oldTab = tab; - size = 2*size + 1; - tab = (GHashBucket **)gmallocn(size, sizeof(GHashBucket *)); - 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); -} - -GHashBucket *GHash::find(GString *key, int *h) { - GHashBucket *p; - - *h = hash(key); - for (p = tab[*h]; p; p = p->next) { - if (!p->key->cmp(key)) { - return p; - } - } - return NULL; -} - -GHashBucket *GHash::find(char *key, int *h) { - GHashBucket *p; - - *h = hash(key); - for (p = tab[*h]; p; p = p->next) { - if (!p->key->cmp(key)) { - return p; - } - } - return NULL; -} - -int GHash::hash(GString *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 GHash::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/thirdparty/xpdf/3.02/src/goo/GHash.h b/thirdparty/xpdf/3.02/src/goo/GHash.h deleted file mode 100644 index 31aba932..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GHash.h +++ /dev/null @@ -1,78 +0,0 @@ -//======================================================================== -// -// GHash.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GHASH_H -#define GHASH_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -class GString; -struct GHashBucket; -struct GHashIter; - -//------------------------------------------------------------------------ - -class GHash { -public: - - GHash(GBool deleteKeysA = gFalse); - ~GHash(); - void add(GString *key, void *val); - void add(GString *key, int val); - void replace(GString *key, void *val); - void replace(GString *key, int val); - void *lookup(GString *key); - int lookupInt(GString *key); - void *lookup(char *key); - int lookupInt(char *key); - void *remove(GString *key); - int removeInt(GString *key); - void *remove(char *key); - int removeInt(char *key); - int getLength() { return len; } - void startIter(GHashIter **iter); - GBool getNext(GHashIter **iter, GString **key, void **val); - GBool getNext(GHashIter **iter, GString **key, int *val); - void killIter(GHashIter **iter); - -private: - - void expand(); - GHashBucket *find(GString *key, int *h); - GHashBucket *find(char *key, int *h); - int hash(GString *key); - int hash(char *key); - - GBool deleteKeys; // set if key strings should be deleted - int size; // number of buckets - int len; // number of entries - GHashBucket **tab; -}; - -#define deleteGHash(hash, T) \ - do { \ - GHash *_hash = (hash); \ - { \ - GHashIter *_iter; \ - GString *_key; \ - void *_p; \ - _hash->startIter(&_iter); \ - while (_hash->getNext(&_iter, &_key, &_p)) { \ - delete (T*)_p; \ - } \ - delete _hash; \ - } \ - } while(0) - -#endif diff --git a/thirdparty/xpdf/3.02/src/goo/GList.cc b/thirdparty/xpdf/3.02/src/goo/GList.cc deleted file mode 100644 index 5d9cba37..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GList.cc +++ /dev/null @@ -1,122 +0,0 @@ -//======================================================================== -// -// GList.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "GList.h" - -//------------------------------------------------------------------------ -// GList -//------------------------------------------------------------------------ - -GList::GList() { - size = 8; - data = (void **)gmallocn(size, sizeof(void*)); - length = 0; - inc = 0; -} - -GList::GList(int sizeA) { - size = sizeA ? sizeA : 8; - data = (void **)gmallocn(size, sizeof(void*)); - length = 0; - inc = 0; -} - -GList::~GList() { - gfree(data); -} - -GList *GList::copy() { - GList *ret; - - ret = new GList(length); - ret->length = length; - memcpy(ret->data, data, length * sizeof(void *)); - ret->inc = inc; - return ret; -} - -void GList::append(void *p) { - if (length >= size) { - expand(); - } - data[length++] = p; -} - -void GList::append(GList *list) { - int i; - - while (length + list->length > size) { - expand(); - } - for (i = 0; i < list->length; ++i) { - data[length++] = list->data[i]; - } -} - -void GList::insert(int i, void *p) { - if (length >= size) { - expand(); - } - if (i < 0) { - i = 0; - } - if (i < length) { - memmove(data+i+1, data+i, (length - i) * sizeof(void *)); - } - data[i] = p; - ++length; -} - -void *GList::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 GList::sort(int (*cmp)(const void *obj1, const void *obj2)) { - qsort(data, length, sizeof(void *), cmp); -} - -void GList::reverse() { - void *t; - int n, i; - - n = length / 2; - for (i = 0; i < n; ++i) { - t = data[i]; - data[i] = data[length - 1 - i]; - data[length - 1 - i] = t; - } -} - -void GList::expand() { - size += (inc > 0) ? inc : size; - data = (void **)greallocn(data, size, sizeof(void*)); -} - -void GList::shrink() { - size -= (inc > 0) ? inc : size/2; - data = (void **)greallocn(data, size, sizeof(void*)); -} diff --git a/thirdparty/xpdf/3.02/src/goo/GList.h b/thirdparty/xpdf/3.02/src/goo/GList.h deleted file mode 100644 index 00504372..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GList.h +++ /dev/null @@ -1,106 +0,0 @@ -//======================================================================== -// -// GList.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GLIST_H -#define GLIST_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -//------------------------------------------------------------------------ -// GList -//------------------------------------------------------------------------ - -class GList { -public: - - // Create an empty list. - GList(); - - // Create an empty list with space for elements. - GList(int sizeA); - - // Destructor - does not free pointed-to objects. - ~GList(); - - //----- general - - // Get the number of elements. - int getLength() { return length; } - - // Returns a (shallow) copy of this list. - GList *copy(); - - //----- ordered list support - - // Return the th element. - // Assumes 0 <= i < length. - void *get(int i) { return data[i]; } - - // Replace the th element. - // Assumes 0 <= i < length. - void put(int i, void *p) { data[i] = p; } - - // Append an element to the end of the list. - void append(void *p); - - // Append another list to the end of this one. - void append(GList *list); - - // Insert an element at index . - // Assumes 0 <= i <= length. - void insert(int i, void *p); - - // Deletes and returns the element at index . - // 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)); - - // Reverse the list. - void reverse(); - - //----- control - - // Set allocation increment to . 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 deleteGList(list, T) \ - do { \ - GList *_list = (list); \ - { \ - int _i; \ - for (_i = 0; _i < _list->getLength(); ++_i) { \ - delete (T*)_list->get(_i); \ - } \ - delete _list; \ - } \ - } while (0) - -#endif diff --git a/thirdparty/xpdf/3.02/src/goo/GMutex.h b/thirdparty/xpdf/3.02/src/goo/GMutex.h deleted file mode 100644 index 7fa93d85..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GMutex.h +++ /dev/null @@ -1,49 +0,0 @@ -//======================================================================== -// -// GMutex.h -// -// Portable mutex macros. -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GMUTEX_H -#define GMUTEX_H - -// Usage: -// -// GMutex m; -// gInitMutex(&m); -// ... -// gLockMutex(&m); -// ... critical section ... -// gUnlockMutex(&m); -// ... -// gDestroyMutex(&m); - -#ifdef WIN32 - -#include - -typedef CRITICAL_SECTION GMutex; - -#define gInitMutex(m) InitializeCriticalSection(m) -#define gDestroyMutex(m) DeleteCriticalSection(m) -#define gLockMutex(m) EnterCriticalSection(m) -#define gUnlockMutex(m) LeaveCriticalSection(m) - -#else // assume pthreads - -#include - -typedef pthread_mutex_t GMutex; - -#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/thirdparty/xpdf/3.02/src/goo/GString.cc b/thirdparty/xpdf/3.02/src/goo/GString.cc deleted file mode 100644 index 6d3f7998..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GString.cc +++ /dev/null @@ -1,722 +0,0 @@ -//======================================================================== -// -// GString.cc -// -// Simple variable-length string type. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#include "gmem.h" -#include "GString.h" - -//------------------------------------------------------------------------ - -union GStringFormatArg { - int i; - Guint ui; - long l; - Gulong ul; - double f; - char c; - char *s; - GString *gs; -}; - -enum GStringFormatType { - fmtIntDecimal, - fmtIntHex, - fmtIntOctal, - fmtIntBinary, - fmtUIntDecimal, - fmtUIntHex, - fmtUIntOctal, - fmtUIntBinary, - fmtLongDecimal, - fmtLongHex, - fmtLongOctal, - fmtLongBinary, - fmtULongDecimal, - fmtULongHex, - fmtULongOctal, - fmtULongBinary, - fmtDouble, - fmtDoubleTrim, - fmtChar, - fmtString, - fmtGString, - fmtSpace -}; - -static char *formatStrings[] = { - "d", "x", "o", "b", "ud", "ux", "uo", "ub", - "ld", "lx", "lo", "lb", "uld", "ulx", "ulo", "ulb", - "f", "g", - "c", - "s", - "t", - "w", - NULL -}; - -//------------------------------------------------------------------------ - -static inline int size(int len) { - int delta; - for (delta = 8; delta < len && delta < 0x100000; delta <<= 1) ; - // this is ((len + 1) + (delta - 1)) & ~(delta - 1) - return (len + delta) & ~(delta - 1); -} - -inline void GString::resize(int length1) { - char *s1; - - if (!s) { - s = new char[size(length1)]; - } else if (size(length1) != size(length)) { - s1 = new char[size(length1)]; - if (length1 < length) { - memcpy(s1, s, length1); - s1[length1] = '\0'; - } else { - memcpy(s1, s, length + 1); - } - delete[] s; - s = s1; - } -} - -GString::GString() { - s = NULL; - resize(length = 0); - s[0] = '\0'; -} - -GString::GString(const char *sA) { - int n = strlen(sA); - - s = NULL; - resize(length = n); - memcpy(s, sA, n + 1); -} - -GString::GString(const char *sA, int lengthA) { - s = NULL; - resize(length = lengthA); - memcpy(s, sA, length * sizeof(char)); - s[length] = '\0'; -} - -GString::GString(GString *str, int idx, int lengthA) { - s = NULL; - resize(length = lengthA); - memcpy(s, str->getCString() + idx, length); - s[length] = '\0'; -} - -GString::GString(GString *str) { - s = NULL; - resize(length = str->getLength()); - memcpy(s, str->getCString(), length + 1); -} - -GString::GString(GString *str1, GString *str2) { - int n1 = str1->getLength(); - int n2 = str2->getLength(); - - s = NULL; - resize(length = n1 + n2); - memcpy(s, str1->getCString(), n1); - memcpy(s + n1, str2->getCString(), n2 + 1); -} - -GString *GString::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 GString(p, len); -} - -GString *GString::format(const char *fmt, ...) { - va_list argList; - GString *s; - - s = new GString(); - va_start(argList, fmt); - s->appendfv(fmt, argList); - va_end(argList); - return s; -} - -GString *GString::formatv(const char *fmt, va_list argList) { - GString *s; - - s = new GString(); - s->appendfv(fmt, argList); - return s; -} - -GString::~GString() { - delete[] s; -} - -GString *GString::clear() { - s[length = 0] = '\0'; - resize(0); - return this; -} - -GString *GString::append(char c) { - resize(length + 1); - s[length++] = c; - s[length] = '\0'; - return this; -} - -GString *GString::append(GString *str) { - int n = str->getLength(); - - resize(length + n); - memcpy(s + length, str->getCString(), n + 1); - length += n; - return this; -} - -GString *GString::append(const char *str) { - int n = strlen(str); - - resize(length + n); - memcpy(s + length, str, n + 1); - length += n; - return this; -} - -GString *GString::append(const char *str, int lengthA) { - resize(length + lengthA); - memcpy(s + length, str, lengthA); - length += lengthA; - s[length] = '\0'; - return this; -} - -GString *GString::appendf(const char *fmt, ...) { - va_list argList; - - va_start(argList, fmt); - appendfv(fmt, argList); - va_end(argList); - return this; -} - -GString *GString::appendfv(const char *fmt, va_list argList) { - GStringFormatArg *args; - int argsLen, argsSize; - GStringFormatArg arg; - int idx, width, prec; - GBool reverseAlign, zeroFill; - GStringFormatType ft; - char buf[65]; - int len, i; - const char *p0, *p1; - char *str; - - argsLen = 0; - argsSize = 8; - args = (GStringFormatArg *)gmallocn(argsSize, sizeof(GStringFormatArg)); - - 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 (width < 0) { - width = 0; - } - if (*p0 == '.') { - ++p0; - prec = 0; - for (; *p0 >= '0' && *p0 <= '9'; ++p0) { - prec = 10 * prec + (*p0 - '0'); - } - } else { - prec = 0; - } - for (ft = (GStringFormatType)0; - formatStrings[ft]; - ft = (GStringFormatType)(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 = (GStringFormatArg *)greallocn(args, argsSize, - sizeof(GStringFormatArg)); - } - 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: - 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 fmtGString: - args[argsLen].gs = va_arg(argList, GString *); - 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 fmtChar: - buf[0] = arg.c; - str = buf; - len = 1; - reverseAlign = !reverseAlign; - break; - case fmtString: - str = arg.s; - len = strlen(str); - reverseAlign = !reverseAlign; - break; - case fmtGString: - 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 GString::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 GString::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 GString::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(10.0, 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; -} - -GString *GString::insert(int i, char c) { - int j; - - resize(length + 1); - for (j = length + 1; j > i; --j) - s[j] = s[j-1]; - s[i] = c; - ++length; - return this; -} - -GString *GString::insert(int i, GString *str) { - int n = str->getLength(); - int j; - - resize(length + n); - for (j = length; j >= i; --j) - s[j+n] = s[j]; - memcpy(s+i, str->getCString(), n); - length += n; - return this; -} - -GString *GString::insert(int i, const char *str) { - int n = strlen(str); - int j; - - resize(length + n); - for (j = length; j >= i; --j) - s[j+n] = s[j]; - memcpy(s+i, str, n); - length += n; - return this; -} - -GString *GString::insert(int i, const char *str, int lengthA) { - int j; - - resize(length + lengthA); - for (j = length; j >= i; --j) - s[j+lengthA] = s[j]; - memcpy(s+i, str, lengthA); - length += lengthA; - return this; -} - -GString *GString::del(int i, int n) { - int j; - - if (i >= 0 && n > 0 && i + 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; -} - -GString *GString::upperCase() { - int i; - - for (i = 0; i < length; ++i) { - if (islower(s[i])) - s[i] = toupper(s[i]); - } - return this; -} - -GString *GString::lowerCase() { - int i; - - for (i = 0; i < length; ++i) { - if (isupper(s[i])) - s[i] = tolower(s[i]); - } - return this; -} - -int GString::cmp(GString *str) { - 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 GString::cmpN(GString *str, int n) { - 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 GString::cmp(const char *sA) { - 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 GString::cmpN(const char *sA, int n) { - 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; -} diff --git a/thirdparty/xpdf/3.02/src/goo/GString.h b/thirdparty/xpdf/3.02/src/goo/GString.h deleted file mode 100644 index 29913806..00000000 --- a/thirdparty/xpdf/3.02/src/goo/GString.h +++ /dev/null @@ -1,136 +0,0 @@ -//======================================================================== -// -// GString.h -// -// Simple variable-length string type. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GSTRING_H -#define GSTRING_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" - -class GString { -public: - - // Create an empty string. - GString(); - - // Create a string from a C string. - GString(const char *sA); - - // Create a string from chars at . This string - // can contain null characters. - GString(const char *sA, int lengthA); - - // Create a string from chars at in . - GString(GString *str, int idx, int lengthA); - - // Copy a string. - GString(GString *str); - GString *copy() { return new GString(this); } - - // Concatenate two strings. - GString(GString *str1, GString *str2); - - // Convert an integer to a string. - static GString *fromInt(int x); - - // Create a formatted string. Similar to printf, but without the - // string overflow issues. Formatting elements consist of: - // {:[][.]} - // where: - // - 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 - // - is the field width -- negative to reverse the alignment; - // starting with a leading zero to zero-fill (for integers) - // - is the number of digits to the right of the decimal - // point (for floating point numbers) - // - 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 -- GString * - // w -- blank space; arg determines width - // To get literal curly braces, use {{ or }}. - static GString *format(const char *fmt, ...); - static GString *formatv(const char *fmt, va_list argList); - - // Destructor. - ~GString(); - - // Get length. - int getLength() { return length; } - - // Get C string. - char *getCString() { return s; } - - // Get th character. - char getChar(int i) { return s[i]; } - - // Change th character. - void setChar(int i, char c) { s[i] = c; } - - // Clear string to zero length. - GString *clear(); - - // Append a character or string. - GString *append(char c); - GString *append(GString *str); - GString *append(const char *str); - GString *append(const char *str, int lengthA); - - // Append a formatted string. - GString *appendf(const char *fmt, ...); - GString *appendfv(const char *fmt, va_list argList); - - // Insert a character or string. - GString *insert(int i, char c); - GString *insert(int i, GString *str); - GString *insert(int i, const char *str); - GString *insert(int i, const char *str, int lengthA); - - // Delete a character or range of characters. - GString *del(int i, int n = 1); - - // Convert string to all-upper/all-lower case. - GString *upperCase(); - GString *lowerCase(); - - // Compare two strings: -1:< 0:= +1:> - int cmp(GString *str); - int cmpN(GString *str, int n); - int cmp(const char *sA); - int cmpN(const char *sA, int n); - -private: - - int length; - char *s; - - void resize(int length1); - 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); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/goo/Makefile.dep b/thirdparty/xpdf/3.02/src/goo/Makefile.dep deleted file mode 100644 index e69de29b..00000000 diff --git a/thirdparty/xpdf/3.02/src/goo/Makefile.in b/thirdparty/xpdf/3.02/src/goo/Makefile.in deleted file mode 100644 index 0baddbb0..00000000 --- a/thirdparty/xpdf/3.02/src/goo/Makefile.in +++ /dev/null @@ -1,71 +0,0 @@ -#======================================================================== -# -# Goo library Makefile -# -# Copyright 1996-2003 Glyph & Cog, LLC -# -#======================================================================== - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ - -CFLAGS = @CFLAGS@ @DEFS@ -I.. -I$(srcdir) -CXXFLAGS = @CXXFLAGS@ @DEFS@ -I.. -I$(srcdir) - -CC = @CC@ -CXX = @CXX@ -AR = @AR@ -RANLIB = @RANLIB@ - -LIBPREFIX = @LIBPREFIX@ - -#------------------------------------------------------------------------ - -.SUFFIXES: .cc - -.cc.o: - $(CXX) $(CXXFLAGS) -c $< - -#------------------------------------------------------------------------ - -CXX_SRC = \ - $(srcdir)/GHash.cc \ - $(srcdir)/GList.cc \ - $(srcdir)/GString.cc \ - $(srcdir)/gmem.cc \ - $(srcdir)/gmempp.cc \ - $(srcdir)/gfile.cc \ - $(srcdir)/FixedPoint.cc - -C_SRC = \ - $(srcdir)/parseargs.c - -#------------------------------------------------------------------------ - -all: $(LIBPREFIX)Goo.a - -#------------------------------------------------------------------------ - -GOO_CXX_OBJS = GHash.o GList.o GString.o gmem.o gmempp.o gfile.o FixedPoint.o -GOO_C_OBJS = parseargs.o -GOO_OBJS = $(GOO_CXX_OBJS) $(GOO_C_OBJS) - -$(LIBPREFIX)Goo.a: $(GOO_OBJS) - rm -f $(LIBPREFIX)Goo.a - $(AR) $(LIBPREFIX)Goo.a $(GOO_OBJS) - $(RANLIB) $(LIBPREFIX)Goo.a - -#------------------------------------------------------------------------ - -clean: - rm -f $(GOO_OBJS) $(LIBPREFIX)Goo.a - -#------------------------------------------------------------------------ - -depend: - $(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >Makefile.dep - $(CC) $(CFLAGS) -MM $(C_SRC) >>Makefile.dep - -include Makefile.dep diff --git a/thirdparty/xpdf/3.02/src/goo/gfile.cc b/thirdparty/xpdf/3.02/src/goo/gfile.cc deleted file mode 100644 index e557596a..00000000 --- a/thirdparty/xpdf/3.02/src/goo/gfile.cc +++ /dev/null @@ -1,834 +0,0 @@ -//======================================================================== -// -// gfile.cc -// -// Miscellaneous file and directory name manipulation. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef WIN32 -# include -#else -# if defined(MACOS) -# include -# elif !defined(ACORN) -# include -# include -# include -# endif -# include -# include -# include -# if !defined(VMS) && !defined(ACORN) && !defined(MACOS) -# include -# endif -# if defined(VMS) && (__DECCXX_VER < 50200000) -# include -# endif -#endif // WIN32 -#include "GString.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 - -//------------------------------------------------------------------------ - -GString *getHomeDir() { -#ifdef VMS - //---------- VMS ---------- - return new GString("SYS$LOGIN:"); - -#elif defined(__EMX__) || defined(WIN32) - //---------- OS/2+EMX and Win32 ---------- - char *s; - GString *ret; - - if ((s = getenv("HOME"))) - ret = new GString(s); - else - ret = new GString("."); - return ret; - -#elif defined(ACORN) - //---------- RISCOS ---------- - return new GString("@"); - -#elif defined(MACOS) - //---------- MacOS ---------- - return new GString(":"); - -#else - //---------- Unix ---------- - char *s; - struct passwd *pw; - GString *ret; - - if ((s = getenv("HOME"))) { - ret = new GString(s); - } else { - if ((s = getenv("USER"))) - pw = getpwnam(s); - else - pw = getpwuid(getuid()); - if (pw) - ret = new GString(pw->pw_dir); - else - ret = new GString("."); - } - return ret; -#endif -} - -GString *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 GString(buf); - return new GString(); -} - -GString *appendToPath(GString *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 ---------- - GString *tmp; - char buf[256]; - char *fp; - - tmp = new GString(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 -} - -GString *grabPath(char *fileName) { -#ifdef VMS - //---------- VMS ---------- - char *p; - - if ((p = strrchr(fileName, ']'))) - return new GString(fileName, p + 1 - fileName); - if ((p = strrchr(fileName, ':'))) - return new GString(fileName, p + 1 - fileName); - return new GString(); - -#elif defined(__EMX__) || defined(WIN32) - //---------- OS/2+EMX and Win32 ---------- - char *p; - - if ((p = strrchr(fileName, '/'))) - return new GString(fileName, p - fileName); - if ((p = strrchr(fileName, '\\'))) - return new GString(fileName, p - fileName); - if ((p = strrchr(fileName, ':'))) - return new GString(fileName, p + 1 - fileName); - return new GString(); - -#elif defined(ACORN) - //---------- RISCOS ---------- - char *p; - - if ((p = strrchr(fileName, '.'))) - return new GString(fileName, p - fileName); - return new GString(); - -#elif defined(MACOS) - //---------- MacOS ---------- - char *p; - - if ((p = strrchr(fileName, ':'))) - return new GString(fileName, p - fileName); - return new GString(); - -#else - //---------- Unix ---------- - char *p; - - if ((p = strrchr(fileName, '/'))) - return new GString(fileName, p - fileName); - return new GString(); -#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 -} - -GString *makePathAbsolute(GString *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]; - GString *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(GString **name, FILE **f, char *mode, char *ext) { -#if defined(WIN32) - //---------- Win32 ---------- - char *tempDir; - GString *s, *s2; - 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 GString(tempDir); - s->append('\\'); - } else { - s = new GString(); - } - s->appendf("x_{0:d}_{1:d}_", - (int)GetCurrentProcessId(), (int)GetCurrentThreadId()); - t = (int)time(NULL); - for (i = 0; i < 1000; ++i) { - s2 = s->copy()->appendf("{0:d}", t + i); - if (ext) { - s2->append(ext); - } - 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 GString(s); - if (ext) { - (*name)->append(ext); - } - if (!(*f = fopen((*name)->getCString(), mode))) { - delete (*name); - *name = NULL; - return gFalse; - } - return gTrue; -#else - //---------- Unix ---------- - char *s; - int fd; - - if (ext) { -#if HAVE_MKSTEMPS - if ((s = getenv("TMPDIR"))) { - *name = new GString(s); - } else { - *name = new GString("/tmp"); - } - (*name)->append("/XXXXXX")->append(ext); - fd = mkstemps((*name)->getCString(), strlen(ext)); -#else - if (!(s = tmpnam(NULL))) { - return gFalse; - } - *name = new GString(s); - (*name)->append(ext); - fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600); -#endif - } else { -#if HAVE_MKSTEMP - if ((s = getenv("TMPDIR"))) { - *name = new GString(s); - } else { - *name = new GString("/tmp"); - } - (*name)->append("/XXXXXX"); - fd = mkstemp((*name)->getCString()); -#else // HAVE_MKSTEMP - if (!(s = tmpnam(NULL))) { - return gFalse; - } - *name = new GString(s); - fd = open((*name)->getCString(), O_WRONLY | O_CREAT | O_EXCL, 0600); -#endif // HAVE_MKSTEMP - } - if (fd < 0 || !(*f = fdopen(fd, mode))) { - delete *name; - *name = NULL; - return gFalse; - } - return gTrue; -#endif -} - -GBool executeCommand(char *cmd) { -#ifdef VMS - return system(cmd) ? gTrue : gFalse; -#else - return system(cmd) ? gFalse : gTrue; -#endif -} - -#ifdef WIN32 -GString *fileNameToUTF8(char *path) { - GString *s; - char *p; - - s = new GString(); - for (p = path; *p; ++p) { - if (*p & 0x80) { - s->append((char)(0xc0 | ((*p >> 6) & 0x03))); - s->append((char)(0x80 | (*p & 0x3f))); - } else { - s->append(*p); - } - } - return s; -} - -GString *fileNameToUTF8(wchar_t *path) { - GString *s; - wchar_t *p; - - s = new GString(); - for (p = path; *p; ++p) { - if (*p < 0x80) { - s->append((char)*p); - } else if (*p < 0x800) { - s->append((char)(0xc0 | ((*p >> 6) & 0x1f))); - s->append((char)(0x80 | (*p & 0x3f))); - } else { - s->append((char)(0xe0 | ((*p >> 12) & 0x0f))); - s->append((char)(0x80 | ((*p >> 6) & 0x3f))); - s->append((char)(0x80 | (*p & 0x3f))); - } - } - return s; -} -#endif - -FILE *openFile(const char *path, const char *mode) { -#ifdef WIN32 - OSVERSIONINFO version; - wchar_t wPath[_MAX_PATH + 1]; - char nPath[_MAX_PATH + 1]; - wchar_t wMode[8]; - const char *p; - int i; - - // NB: _wfopen is only available in NT - version.dwOSVersionInfoSize = sizeof(version); - GetVersionEx(&version); - if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - for (p = path, i = 0; *p && i < _MAX_PATH; ++i) { - if ((p[0] & 0xe0) == 0xc0 && - p[1] && (p[1] & 0xc0) == 0x80) { - wPath[i] = (wchar_t)(((p[0] & 0x1f) << 6) | - (p[1] & 0x3f)); - p += 2; - } else if ((p[0] & 0xf0) == 0xe0 && - p[1] && (p[1] & 0xc0) == 0x80 && - p[2] && (p[2] & 0xc0) == 0x80) { - wPath[i] = (wchar_t)(((p[0] & 0x0f) << 12) | - ((p[1] & 0x3f) << 6) | - (p[2] & 0x3f)); - p += 3; - } else { - wPath[i] = (wchar_t)(p[0] & 0xff); - p += 1; - } - } - wPath[i] = (wchar_t)0; - for (i = 0; mode[i] && i < sizeof(mode) - 1; ++i) { - wMode[i] = (wchar_t)(mode[i] & 0xff); - } - wMode[i] = (wchar_t)0; - return _wfopen(wPath, wMode); - } else { - for (p = path, i = 0; *p && i < _MAX_PATH; ++i) { - if ((p[0] & 0xe0) == 0xc0 && - p[1] && (p[1] & 0xc0) == 0x80) { - nPath[i] = (char)(((p[0] & 0x1f) << 6) | - (p[1] & 0x3f)); - p += 2; - } else if ((p[0] & 0xf0) == 0xe0 && - p[1] && (p[1] & 0xc0) == 0x80 && - p[2] && (p[2] & 0xc0) == 0x80) { - nPath[i] = (char)(((p[1] & 0x3f) << 6) | - (p[2] & 0x3f)); - p += 3; - } else { - nPath[i] = p[0]; - p += 1; - } - } - nPath[i] = '\0'; - return fopen(nPath, mode); - } -#else - return fopen(path, mode); -#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) - int fa; - GString *s; -#elif defined(ACORN) -#else - struct stat st; - GString *s; -#endif - - name = new GString(nameA); - dir = gFalse; - if (doStat) { -#ifdef VMS - if (!strcmp(nameA, "-") || - ((p = strrchr(nameA, '.')) && !strncmp(p, ".DIR;", 5))) - dir = gTrue; -#elif defined(ACORN) -#else - s = new GString(dirPath); - appendToPath(s, nameA); -#ifdef WIN32 - fa = GetFileAttributes(s->getCString()); - dir = (fa != 0xFFFFFFFF && (fa & FILE_ATTRIBUTE_DIRECTORY)); -#else - if (stat(s->getCString(), &st) == 0) - dir = S_ISDIR(st.st_mode); -#endif - delete s; -#endif - } -} - -GDirEntry::~GDirEntry() { - delete name; -} - -GDir::GDir(char *name, GBool doStatA) { - path = new GString(name); - doStat = doStatA; -#if defined(WIN32) - GString *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) { - FindClose(hnd); - hnd = NULL; - } -#elif defined(ACORN) -#elif defined(MACOS) -#else - if (dir) - closedir(dir); -#endif -} - -GDirEntry *GDir::getNextEntry() { - GDirEntry *e; - -#if defined(WIN32) - if (hnd) { - e = new GDirEntry(path->getCString(), ffd.cFileName, doStat); - if (hnd && !FindNextFile(hnd, &ffd)) { - FindClose(hnd); - hnd = NULL; - } - } 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) { - ent = (struct dirent *)readdir(dir); - if (ent && !strcmp(ent->d_name, ".")) { - ent = (struct dirent *)readdir(dir); - } - if (ent) { - e = new GDirEntry(path->getCString(), ent->d_name, doStat); - } - } -#endif - - return e; -} - -void GDir::rewind() { -#ifdef WIN32 - GString *tmp; - - if (hnd) - 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/thirdparty/xpdf/3.02/src/goo/gfile.h b/thirdparty/xpdf/3.02/src/goo/gfile.h deleted file mode 100644 index a1c1fa24..00000000 --- a/thirdparty/xpdf/3.02/src/goo/gfile.h +++ /dev/null @@ -1,151 +0,0 @@ -//======================================================================== -// -// gfile.h -// -// Miscellaneous file and directory name manipulation. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GFILE_H -#define GFILE_H - -#include -#include -#include -#if defined(WIN32) -# include -# ifdef FPTEX -# include -# else -# include -# endif -#elif defined(ACORN) -#elif defined(MACOS) -# include -#else -# include -# include -# ifdef VMS -# include "vms_dirent.h" -# elif HAVE_DIRENT_H -# include -# define NAMLEN(d) strlen((d)->d_name) -# else -# define dirent direct -# define NAMLEN(d) (d)->d_namlen -# if HAVE_SYS_NDIR_H -# include -# endif -# if HAVE_SYS_DIR_H -# include -# endif -# if HAVE_NDIR_H -# include -# endif -# endif -#endif -#include "gtypes.h" - -class GString; - -//------------------------------------------------------------------------ - -// Get home directory path. -extern GString *getHomeDir(); - -// Get current directory. -extern GString *getCurrentDir(); - -// Append a file name to a path string. may be an empty -// string, denoting the current directory). Returns . -extern GString *appendToPath(GString *path, char *fileName); - -// Grab the path from the front of the file name. If there is no -// directory component in , returns an empty string. -extern GString *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 GString *makePathAbsolute(GString *path); - -// Get the modification time for . Returns 0 if there is an -// error. -extern time_t getModTime(char *fileName); - -// Create a temporary file and open it for writing. If 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 string -// should be "w" or "wb". Returns true on success. -extern GBool openTempFile(GString **name, FILE **f, char *mode, char *ext); - -// Execute . Returns true on success. -extern GBool executeCommand(char *cmd); - -#ifdef WIN32 -// Convert a file name from Latin-1 to UTF-8. -extern GString *fileNameToUTF8(char *path); - -// Convert a file name from UCS-2 to UTF-8. -extern GString *fileNameToUTF8(wchar_t *path); -#endif - -// Open a file. On Windows, this converts the path from UTF-8 to -// UCS-2 and calls _wfopen (if available). On other OSes, this simply -// calls fopen. -extern FILE *openFile(const char *path, const char *mode); - -// 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(); - GString *getName() { return name; } - GBool isDir() { return dir; } - -private: - - GString *name; // dir/file name - GBool dir; // is it a directory? -}; - -class GDir { -public: - - GDir(char *name, GBool doStatA = gTrue); - ~GDir(); - GDirEntry *getNextEntry(); - void rewind(); - -private: - - GString *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/thirdparty/xpdf/3.02/src/goo/gmem.cc b/thirdparty/xpdf/3.02/src/goo/gmem.cc deleted file mode 100644 index 8384cef2..00000000 --- a/thirdparty/xpdf/3.02/src/goo/gmem.cc +++ /dev/null @@ -1,296 +0,0 @@ -/* - * gmem.c - * - * Memory routines with out-of-memory checking. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#include -#include -#include -#include -#include -#include -#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 */ - -void *gmalloc(int size) GMEM_EXCEP { -#ifdef DEBUG_MEM - int size1; - char *mem; - GMemHdr *hdr; - void *data; - unsigned long *trl, *p; - - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { - return NULL; - } - size1 = gMemDataSize(size); - if (!(mem = (char *)malloc(size1 + gMemHdrSize + gMemTrlSize))) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Out of memory\n"); - exit(1); -#endif - } - 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) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { - return NULL; - } - if (!(p = malloc(size))) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Out of memory\n"); - exit(1); -#endif - } - return p; -#endif -} - -void *grealloc(void *p, int size) GMEM_EXCEP { -#ifdef DEBUG_MEM - GMemHdr *hdr; - void *q; - int oldSize; - - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { - if (p) { - gfree(p); - } - return NULL; - } - if (p) { - hdr = (GMemHdr *)((char *)p - gMemHdrSize); - oldSize = hdr->size; - q = gmalloc(size); - memcpy(q, p, size < oldSize ? size : oldSize); - gfree(p); - } else { - q = gmalloc(size); - } - return q; -#else - void *q; - - if (size < 0) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Invalid memory allocation size\n"); - exit(1); -#endif - } - if (size == 0) { - if (p) { - free(p); - } - return NULL; - } - if (p) { - q = realloc(p, size); - } else { - q = malloc(size); - } - if (!q) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Out of memory\n"); - exit(1); -#endif - } - return q; -#endif -} - -void *gmallocn(int nObjs, int objSize) GMEM_EXCEP { - int n; - - if (nObjs == 0) { - return NULL; - } - n = nObjs * objSize; - if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Bogus memory allocation size\n"); - exit(1); -#endif - } - return gmalloc(n); -} - -void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP { - int n; - - if (nObjs == 0) { - if (p) { - gfree(p); - } - return NULL; - } - n = nObjs * objSize; - if (objSize <= 0 || nObjs < 0 || nObjs >= INT_MAX / objSize) { -#if USE_EXCEPTIONS - throw GMemException(); -#else - fprintf(stderr, "Bogus memory allocation size\n"); - exit(1); -#endif - } - return grealloc(p, n); -} - -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; -} diff --git a/thirdparty/xpdf/3.02/src/goo/gmem.h b/thirdparty/xpdf/3.02/src/goo/gmem.h deleted file mode 100644 index da34736f..00000000 --- a/thirdparty/xpdf/3.02/src/goo/gmem.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * gmem.h - * - * Memory routines with out-of-memory checking. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#ifndef GMEM_H -#define GMEM_H - -#include -#include - -#if USE_EXCEPTIONS - -class GMemException { -public: - GMemException() {} - ~GMemException() {} -}; - -#define GMEM_EXCEP throw(GMemException) - -#else // USE_EXCEPTIONS - -#define GMEM_EXCEP - -#endif // USE_EXCEPTIONS - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Same as malloc, but prints error message and exits if malloc() - * returns NULL. - */ -extern void *gmalloc(int size) GMEM_EXCEP; - -/* - * Same as realloc, but prints error message and exits if realloc() - * returns NULL. If 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 GString *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 . - // Returns the new stream. - Stream *addFilters(Object *dict); - -private: - - Stream *makeFilter(char *name, Stream *str, Object *params); - - int ref; // reference count -}; - -//------------------------------------------------------------------------ -// BaseStream -// -// This is the base class for all streams that read directly from a file. -//------------------------------------------------------------------------ - -class BaseStream: public Stream { -public: - - BaseStream(Object *dictA); - 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 GString *getFileName() { return NULL; } - - // Get/set position of first byte of stream within the file. - virtual Guint getStart() = 0; - virtual void moveStart(int delta) = 0; - -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; } - -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(); - - // Gets the next pixel from the stream. 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(); - -private: - - GBool getNextLine(); - - 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 (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); - -private: - - GBool fillBuf(); - - FILE *f; - Guint start; - GBool limited; - Guint length; - char buf[fileStreamBufSize]; - 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); - -private: - - char *buf; - Guint start; - Guint length; - 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); - -private: - - Stream *str; - GBool limited; - Guint length; -}; - -//------------------------------------------------------------------------ -// 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 GString *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 GString *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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - 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 GString *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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -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 - Guint 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 blackPixels); - void addPixelsNeg(int a1, int blackPixels); - short getTwoDimCode(); - short getWhiteCode(); - short getBlackCode(); - short lookBits(int n); - void eatBits(int n) { if ((inputBits -= n) < 0) inputBits = 0; } -}; - -//------------------------------------------------------------------------ -// 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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - Stream *getRawStream() { return str; } - -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(); -}; - -//------------------------------------------------------------------------ -// 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 GString *getPSFilter(int psLevel, char *indent); - virtual GBool isBinary(GBool last = gTrue); - -private: - - 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); -}; - -//------------------------------------------------------------------------ -// 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 GString *getPSFilter(int psLevel, char *indent) { return NULL; } - virtual GBool isBinary(GBool last = gTrue) { return gFalse; } -}; - -//------------------------------------------------------------------------ -// BufStream -//------------------------------------------------------------------------ - -class BufStream: public FilterStream { -public: - - BufStream(Stream *strA, int bufSizeA); - virtual ~BufStream(); - virtual StreamKind getKind() { return strWeird; } - virtual void reset(); - virtual int getChar(); - virtual int lookChar(); - virtual GString *getPSFilter(int psLevel, char *indent) { return NULL; } - virtual GBool isBinary(GBool last = gTrue); - - int lookChar(int idx); - -private: - - int *buf; - int bufSize; -}; - -//------------------------------------------------------------------------ -// 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 GString *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 GString *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 GString *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 GString *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(); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.cc deleted file mode 100644 index fcd2de68..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.cc +++ /dev/null @@ -1,4182 +0,0 @@ -//======================================================================== -// -// TextOutputDev.cc -// -// Copyright 1997-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#ifdef WIN32 -#include // for O_BINARY -#include // for setmode -#endif -#include "gmem.h" -#include "GString.h" -#include "GList.h" -#include "config.h" -#include "Error.h" -#include "GlobalParams.h" -#include "UnicodeMap.h" -#include "UnicodeTypeTable.h" -#include "GfxState.h" -#include "Link.h" -#include "TextOutputDev.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, Link *linkA) - { xMin = xMinA; yMin = yMinA; xMax = xMaxA; yMax = yMaxA; link = linkA; } - ~TextLink() {} - - int xMin, yMin, xMax, yMax; - Link *link; -}; - -//------------------------------------------------------------------------ -// TextFontInfo -//------------------------------------------------------------------------ - -TextFontInfo::TextFontInfo(GfxState *state) { - gfxFont = state->getFont(); -#if TEXTOUT_WORD_LIST - fontName = (gfxFont && gfxFont->getOrigName()) - ? gfxFont->getOrigName()->copy() - : (GString *)NULL; - flags = gfxFont ? gfxFont->getFlags() : 0; -#endif -} - -TextFontInfo::~TextFontInfo() { -#if TEXTOUT_WORD_LIST - if (fontName) { - delete fontName; - } -#endif -} - -GBool TextFontInfo::matches(GfxState *state) { - return state->getFont() == gfxFont; -} - -//------------------------------------------------------------------------ -// TextWord -//------------------------------------------------------------------------ - -TextWord::TextWord(GfxState *state, int rotA, double x0, double y0, - TextFontInfo *fontA, double fontSizeA) { - GfxFont *gfxFont; - double x, y, ascent, descent; - - rot = rotA; - 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; - edge = NULL; - charPos = 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(edge); - gfree(charPos); -} - -void TextWord::addChar(GfxState *state, double x, double y, - double dx, double dy, int charPosA, int charLen, - Unicode u) { - if (len == size) { - size += 16; - text = (Unicode *)greallocn(text, size, sizeof(Unicode)); - edge = (double *)greallocn(edge, size + 1, sizeof(double)); - charPos = (int *)greallocn(charPos, size + 1, sizeof(int)); - } - text[len] = u; - charPos[len] = charPosA; - charPos[len + 1] = charPosA + charLen; - 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)); - edge = (double *)greallocn(edge, size + 1, sizeof(double)); - charPos = (int *)greallocn(charPos, size + 1, sizeof(int)); - } - for (i = 0; i < word->len; ++i) { - text[len + i] = word->text[i]; - edge[len + i] = word->edge[i]; - charPos[len + i] = word->charPos[i]; - } - edge[len + word->len] = word->edge[word->len]; - charPos[len + word->len] = word->charPos[word->len]; - len += word->len; -} - -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 - -GString *TextWord::getText() { - GString *s; - UnicodeMap *uMap; - char buf[8]; - int n, i; - - s = new GString(); - 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; - xMin = yMin = 0; - xMax = yMax = -1; - base = baseA; - words = lastWord = NULL; - text = NULL; - edge = NULL; - col = NULL; - len = 0; - convertedLen = 0; - hyphenated = gFalse; - next = NULL; -} - -TextLine::~TextLine() { - TextWord *word; - - while (words) { - word = words; - words = words->next; - delete word; - } - gfree(text); - gfree(edge); - gfree(col); -} - -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[0] == word0->charPos[word0->len]) { - 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 + d4 * (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; -} - -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, double fixedPitch) { - 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, wordSpacing, delta, priDelta, secDelta; - TextLine **lineArray; - GBool found, overlap; - 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; - 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); - wordSpacing = fixedPitch ? fixedPitch : maxWordSpacing * fontSize; - - // 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; - overlap = gFalse; - for (baseIdx = minBaseIdx; - !overlap && 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); - if (delta < minCharSpacing * fontSize) { - overlap = gTrue; - break; - } else { - if (delta < wordSpacing && - (!bestWord1 || word1->primaryCmp(bestWord1) < 0)) { - bestWordBaseIdx = baseIdx; - bestWord0 = word0; - bestWord1 = word1; - } - break; - } - } - } - } - if (overlap || !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; - if (fixedPitch) { - for (i = 0; i < nLines; ++i) { - line0 = lineArray[i]; - col1 = 0; // make gcc happy - switch (rot) { - case 0: - col1 = (int)((line0->xMin - xMin) / fixedPitch + 0.5); - break; - case 1: - col1 = (int)((line0->yMin - yMin) / fixedPitch + 0.5); - break; - case 2: - col1 = (int)((xMax - line0->xMax) / fixedPitch + 0.5); - break; - case 3: - col1 = (int)((yMax - line0->yMax) / fixedPitch + 0.5); - break; - } - for (k = 0; k <= line0->len; ++k) { - line0->col[k] += col1; - } - if (line0->col[line0->len] > nColumns) { - nColumns = line0->col[line0->len]; - } - } - } else { - 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; -} - -//------------------------------------------------------------------------ -// 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 GList(); - - 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; - - 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 GList(); - lastFindXMin = lastFindYMin = 0; - haveLastFind = gFalse; - underlines = new GList(); - links = new GList(); -} - -TextPage::~TextPage() { - int rot; - - clear(); - if (!rawOrder) { - for (rot = 0; rot < 4; ++rot) { - delete pools[rot]; - } - } - delete fonts; - deleteGList(underlines, TextUnderline); - deleteGList(links, TextLink); -} - -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); - } - deleteGList(fonts, TextFontInfo); - deleteGList(underlines, TextUnderline); - deleteGList(links, TextLink); - - 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 GList(); - underlines = new GList(); - links = new GList(); -} - -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) { - 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]); - if (state->getFont()->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[0] > 0 || m[3] < 0) ? 0 : 2; - } else { - rot = (m[2] > 0) ? 1 : 3; - } - - curWord = new TextWord(state, rot, x0, y0, 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) { - 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) { - curWord->addChar(state, x1 + i*w1, y1 + i*h1, w1, h1, - charPos, nBytes, u[i]); - } - } - charPos += nBytes; -} - -void TextPage::incCharCount(int nChars) { - charPos += nChars; -} - -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, Link *link) { - links->append(new TextLink(xMin, yMin, xMax, yMax, link)); -} - -void TextPage::coalesce(GBool physLayout, double fixedPitch, GBool doHTML) { - UnicodeMap *uMap; - TextPool *pool; - TextWord *word0, *word1, *word2; - TextLine *line; - TextBlock *blkList, *blkStack, *blk, *lastBlk, *blk0, *blk1; - TextBlock **blkArray; - 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 firstBlkIdx, nBlocksLeft; - int col1, col2; - int i, j, n; - - if (rawOrder) { - primaryRot = 0; - primaryLR = gTrue; - return; - } - - uMap = globalParams->getTextEncoding(); - blkList = NULL; - lastBlk = NULL; - nBlocks = 0; - primaryRot = 0; - -#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, fixedPitch); - if (lastBlk) { - lastBlk->next = blk; - } else { - blkList = blk; - } - lastBlk = blk; - count[rot] += blk->charCount; - ++nBlocks; - } - - if (count[rot] > count[primaryRot]) { - primaryRot = rot; - } - } - -#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 - - if (physLayout && fixedPitch) { - - blocks = (TextBlock **)gmallocn(nBlocks, sizeof(TextBlock *)); - for (blk = blkList, i = 0; blk; blk = blk->next, ++i) { - blocks[i] = blk; - col1 = 0; // make gcc happy - switch (primaryRot) { - case 0: - col1 = (int)(blk->xMin / fixedPitch + 0.5); - break; - case 1: - col1 = (int)(blk->yMin / fixedPitch + 0.5); - break; - case 2: - col1 = (int)((pageWidth - blk->xMax) / fixedPitch + 0.5); - break; - case 3: - col1 = (int)((pageHeight - blk->yMax) / fixedPitch + 0.5); - break; - } - blk->col = col1; - for (line = blk->lines; line; line = line->next) { - for (j = 0; j <= line->len; ++j) { - line->col[j] += col1; - } - } - } - - } else { - - // sort blocks into xy order for column assignment - 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: col[0]=%d\n", line->col[0]); - 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 - - // sort blocks into yx order (in preparation for reading order sort) - qsort(blocks, nBlocks, sizeof(TextBlock *), &TextBlock::cmpYXPrimaryRot); - - // 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("*** blocks, after yx 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"); -#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 - blkArray = (TextBlock **)gmallocn(nBlocks, sizeof(TextBlock *)); - memcpy(blkArray, blocks, nBlocks * sizeof(TextBlock *)); - flows = lastFlow = NULL; - firstBlkIdx = 0; - nBlocksLeft = nBlocks; - while (nBlocksLeft > 0) { - - // find the upper-left-most block - for (; !blkArray[firstBlkIdx]; ++firstBlkIdx) ; - i = firstBlkIdx; - blk = blkArray[i]; - for (j = firstBlkIdx + 1; j < nBlocks; ++j) { - blk1 = blkArray[j]; - if (blk1) { - if (blk && blk->secondaryDelta(blk1) > 0) { - break; - } - if (blk1->primaryCmp(blk) < 0) { - i = j; - blk = blk1; - } - } - } - blkArray[i] = NULL; - --nBlocksLeft; - blk->next = NULL; - - // create a new flow, starting with the upper-left-most block - flow = new TextFlow(this, blk); - if (lastFlow) { - lastFlow->next = flow; - } else { - flows = flow; - } - lastFlow = flow; - fontSize = blk->lines->words->fontSize; - - // push the upper-left-most block on the stack - blk->stackNext = NULL; - blkStack = blk; - - // find the other blocks in this flow - while (blkStack) { - - // find the upper-left-most block under (but within - // maxBlockSpacing of) the top block on the stack - blkSpace = maxBlockSpacing * blkStack->lines->words->fontSize; - blk = NULL; - i = -1; - for (j = firstBlkIdx; j < nBlocks; ++j) { - blk1 = blkArray[j]; - if (blk1) { - if (blkStack->secondaryDelta(blk1) > blkSpace) { - break; - } - if (blk && blk->secondaryDelta(blk1) > 0) { - break; - } - if (blk1->isBelow(blkStack) && - (!blk || blk1->primaryCmp(blk) < 0)) { - i = j; - blk = blk1; - } - } - } - - // if a suitable block was found, add it to the flow and push it - // onto the stack - if (blk && flow->blockFits(blk, blkStack)) { - blkArray[i] = NULL; - --nBlocksLeft; - blk->next = NULL; - flow->addBlock(blk); - fontSize = blk->lines->words->fontSize; - blk->stackNext = blkStack; - blkStack = blk; - - // otherwise (if there is no block under the top block or the - // block is not suitable), pop the stack - } else { - blkStack = blkStack->stackNext; - } - } - } - gfree(blkArray); - -#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->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 (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 = (Unicode *)gmallocn(len, sizeof(Unicode)); - for (i = 0; i < len; ++i) { - s2[i] = unicodeToUpper(s[i]); - } - } else { - s2 = s; - } - - 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; - } - - // convert the line to uppercase - m = line->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->text[k]); - } - } else { - txt = line->text; - } - - // 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) { - switch (line->rot) { - case 0: - xMin1 = line->edge[j]; - xMax1 = line->edge[j + len]; - yMin1 = line->yMin; - yMax1 = line->yMax; - break; - case 1: - xMin1 = line->xMin; - xMax1 = line->xMax; - yMin1 = line->edge[j]; - yMax1 = line->edge[j + len]; - break; - case 2: - xMin1 = line->edge[j + len]; - xMax1 = line->edge[j]; - yMin1 = line->yMin; - yMax1 = line->yMax; - break; - case 3: - xMin1 = line->xMin; - xMax1 = line->xMax; - yMin1 = line->edge[j + len]; - yMax1 = line->edge[j]; - 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; - } - } - } - } - - if (!caseSensitive) { - gfree(s2); - gfree(txt); - } - - if (found) { - *xMin = xMin0; - *xMax = xMax0; - *yMin = yMin0; - *yMax = yMax0; - lastFindXMin = xMin0; - lastFindYMin = yMin0; - haveLastFind = gTrue; - return gTrue; - } - - return gFalse; -} - -GString *TextPage::getText(double xMin, double yMin, - double xMax, double yMax) { - GString *s; - UnicodeMap *uMap; - GBool isUnicode; - 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 GString(); - - if (rawOrder) { - return s; - } - - // get the output encoding - if (!(uMap = globalParams->getTextEncoding())) { - return s; - } - isUnicode = uMap->isUnicode(); - 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; -} - -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) - 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->len] && - pos + length > word->charPos[0]) { - for (j0 = 0; - j0 < word->len && pos >= word->charPos[j0 + 1]; - ++j0) ; - for (j1 = word->len - 1; - j1 > j0 && pos + length <= word->charPos[j1]; - --j1) ; - 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; - GString *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 GString(); - 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 && - word->next->xMin > - word->xMax - minDupBreakOverlap * 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 GString(); - 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 GString(); - dumpFragment(line->text, n, uMap, s); - (*outputFunc)(outputStream, s->getCString(), s->getLength()); - delete s; - if (!line->hyphenated) { - if (line->next) { - (*outputFunc)(outputStream, space, spaceLen); - } else if (blk->next) { - //~ this is a bit of a kludge - we should really do a more - //~ intelligent determination of paragraphs - if (blk->next->lines->words->fontSize == - blk->lines->words->fontSize) { - (*outputFunc)(outputStream, space, spaceLen); - } else { - (*outputFunc)(outputStream, eol, eolLen); - } - } - } - } - } - (*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, - GString *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]) || unicodeTypeNum(text[j])); - ++j) ; - if (j > i) { - s->append(rle, rleLen); - for (k = j - 1; k >= i; --k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - s->append(popdf, popdfLen); - i = j; - } - } - - } else { - - // Note: This code treats numeric characters (European and - // Arabic/Indic) as left-to-right, which isn't strictly correct - // (incurs extra LRE/POPDF pairs), but does produce correct - // visual formatting. - s->append(rle, rleLen); - i = len - 1; - while (i >= 0) { - // output a right-to-left section - for (j = i; - j >= 0 && !(unicodeTypeL(text[j]) || unicodeTypeNum(text[j])); - --j) ; - for (k = i; k > j; --k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - i = j; - // output a left-to-right section - for (j = i; j >= 0 && !unicodeTypeR(text[j]); --j) ; - if (j < i) { - s->append(lre, lreLen); - for (k = j + 1; k <= i; ++k) { - n = uMap->mapUnicode(text[k], buf, sizeof(buf)); - s->append(buf, n); - ++nCols; - } - s->append(popdf, popdfLen); - i = j; - } - } - s->append(popdf, popdfLen); - - } - - } 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 - -//------------------------------------------------------------------------ -// TextOutputDev -//------------------------------------------------------------------------ - -static void outputToFile(void *stream, char *text, int len) { - fwrite(text, 1, len, (FILE *)stream); -} - -TextOutputDev::TextOutputDev(char *fileName, GBool physLayoutA, - double fixedPitchA, GBool rawOrderA, - GBool append) { - text = NULL; - physLayout = physLayoutA; - fixedPitch = physLayout ? fixedPitchA : 0; - 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(errIO, -1, "Couldn't open text file '{0:s}'", fileName); - ok = gFalse; - return; - } - outputFunc = &outputToFile; - } else { - outputStream = NULL; - } - - // set up text object - text = new TextPage(rawOrderA); -} - -TextOutputDev::TextOutputDev(TextOutputFunc func, void *stream, - GBool physLayoutA, double fixedPitchA, - GBool rawOrderA) { - outputFunc = func; - outputStream = stream; - needClose = gFalse; - physLayout = physLayoutA; - fixedPitch = physLayout ? fixedPitchA : 0; - rawOrder = rawOrderA; - doHTML = gFalse; - text = new TextPage(rawOrderA); - ok = gTrue; -} - -TextOutputDev::~TextOutputDev() { - if (needClose) { -#ifdef MACOS - ICS_MapRefNumAndAssign((short)((FILE *)outputStream)->handle); -#endif - fclose((FILE *)outputStream); - } - if (text) { - delete text; - } -} - -void TextOutputDev::startPage(int pageNum, GfxState *state) { - text->startPage(state); -} - -void TextOutputDev::endPage() { - text->endPage(); - text->coalesce(physLayout, fixedPitch, doHTML); - if (outputStream) { - text->dump(outputStream, outputFunc, physLayout); - } -} - -void TextOutputDev::restoreState(GfxState *state) { - text->updateFont(state); -} - -void TextOutputDev::updateFont(GfxState *state) { - text->updateFont(state); -} - -void TextOutputDev::beginString(GfxState *state, GString *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) { - text->addChar(state, x, y, dx, dy, c, nBytes, u, uLen); -} - -void TextOutputDev::incCharCount(int nChars) { - text->incCharCount(nChars); -} - -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(Link *link) { - 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); -} - -GString *TextOutputDev::getText(double xMin, double yMin, - double xMax, double yMax) { - return text->getText(xMin, yMin, xMax, yMax); -} - -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/thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.h deleted file mode 100644 index 9094accd..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/TextOutputDev.h +++ /dev/null @@ -1,678 +0,0 @@ -//======================================================================== -// -// TextOutputDev.h -// -// Copyright 1997-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef TEXTOUTPUTDEV_H -#define TEXTOUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" -#include "GfxFont.h" -#include "OutputDev.h" - -class GString; -class GList; -class GfxFont; -class GfxState; -class UnicodeMap; -class Link; - -class TextWord; -class TextPool; -class TextLine; -class TextLineFrag; -class TextBlock; -class TextFlow; -class TextWordList; -class TextPage; - -//------------------------------------------------------------------------ - -typedef void (*TextOutputFunc)(void *stream, char *text, int len); - -//------------------------------------------------------------------------ -// TextFontInfo -//------------------------------------------------------------------------ - -class TextFontInfo { -public: - - TextFontInfo(GfxState *state); - ~TextFontInfo(); - - GBool matches(GfxState *state); - -#if TEXTOUT_WORD_LIST - // Get the font name (which may be NULL). - GString *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 - GString *fontName; - int flags; -#endif - - friend class TextWord; - friend class TextPage; -}; - -//------------------------------------------------------------------------ -// TextWord -//------------------------------------------------------------------------ - -class TextWord { -public: - - // Constructor. - TextWord(GfxState *state, int rotA, double x0, double y0, - TextFontInfo *fontA, double fontSize); - - // Destructor. - ~TextWord(); - - // Add a character to the word. - void addChar(GfxState *state, double x, double y, - double dx, double dy, int charPosA, int charLen, - Unicode u); - - // Merge onto the end of . - void merge(TextWord *word); - - // Compares to , 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 and - // . - double primaryDelta(TextWord *word); - - static int cmpYX(const void *p1, const void *p2); - - // 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; } - Unicode getChar(int idx) { return text[idx]; } - GString *getText(); - GString *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[0]; } - int getCharLen() { return charPos[len]; } - GBool getSpaceAfter() { return spaceAfter; } -#endif - - GBool isUnderlined() { return underlined; } - Link *getLink() { return link; } - -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 - double *edge; // "near" edge x or y coord of each char - // (plus one extra entry for the last char) - int *charPos; // character position (within content stream) - // of each char (plus one extra entry for - // the last char) - int len; // length of text/edge/charPos arrays - int size; // size of text/edge/charPos arrays - 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; - Link *link; - - friend class TextPool; - friend class TextLine; - friend class TextBlock; - friend class TextFlow; - friend class TextWordList; - friend class TextPage; -}; - -//------------------------------------------------------------------------ -// 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; -}; - -//------------------------------------------------------------------------ -// TextLine -//------------------------------------------------------------------------ - -class TextLine { -public: - - TextLine(TextBlock *blkA, int rotA, double baseA); - ~TextLine(); - - void addWord(TextWord *word); - - // Return the distance along the primary axis between and - // . - double primaryDelta(TextLine *line); - - // Compares to , returning -1 (<), 0 (=), or +1 (>), - // based on a primary-axis comparison, e.g., x ordering if rot=0. - int primaryCmp(TextLine *line); - - // Compares to , 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); - - // 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 - - friend class TextLineFrag; - friend class TextBlock; - friend class TextFlow; - friend class TextWordList; - friend class TextPage; -}; - -//------------------------------------------------------------------------ -// TextBlock -//------------------------------------------------------------------------ - -class TextBlock { -public: - - TextBlock(TextPage *pageA, int rotA); - ~TextBlock(); - - void addWord(TextWord *word); - - void coalesce(UnicodeMap *uMap, double fixedPitch); - - // Update this block's priMin and priMax values, looking at . - 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 is below , relative to the page's - // primary rotation. - GBool isBelow(TextBlock *blk); - - // 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; } - -private: - - 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 - - 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; -}; - -//------------------------------------------------------------------------ -// 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 fits below 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 - // 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 th word from the list. - TextWord *get(int idx); - -private: - - GList *words; // [TextWord] -}; - -#endif // TEXTOUT_WORD_LIST - -//------------------------------------------------------------------------ -// TextPage -//------------------------------------------------------------------------ - -class TextPage { -public: - - // Constructor. - TextPage(GBool rawOrderA); - - // Destructor. - ~TextPage(); - - // 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); - - // Add invisible characters. - void incCharCount(int nChars); - - // 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, Link *link); - - // Coalesce strings that look like parts of the same line. - void coalesce(GBool physLayout, double fixedPitch, GBool doHTML); - - // Find a string. If is true, starts looking at the - // top of the page; else if is true, starts looking - // immediately after the last find result; else starts looking at - // ,. If is true, stops looking at the - // bottom of the page; else if is true, stops looking - // just before the last find result; else stops looking at - // ,. - 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. - GString *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); - - // 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 - // is true and this->rawOrder is false), or reading order (if both - // flags are false). - TextWordList *makeWordList(GBool physLayout); -#endif - -private: - - void clear(); - void assignColumns(TextLineFrag *frags, int nFrags, int rot); - int dumpFragment(Unicode *text, int len, UnicodeMap *uMap, GString *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 - - GList *fonts; // all font info objects used on this - // page [TextFontInfo] - - double lastFindXMin, // coordinates of the last "find" result - lastFindYMin; - GBool haveLastFind; - - GList *underlines; // [TextUnderline] - GList *links; // [TextLink] - - friend class TextLine; - friend class TextLineFrag; - friend class TextBlock; - friend class TextFlow; - friend class TextWordList; -}; - -//------------------------------------------------------------------------ -// TextOutputDev -//------------------------------------------------------------------------ - -class TextOutputDev: public OutputDev { -public: - - // Open a text output file. If is NULL, no file is - // written (this is useful, e.g., for searching text). If - // is true, the original physical layout of the text - // is maintained. If is true, the text is kept in - // content stream order. - TextOutputDev(char *fileName, GBool physLayoutA, - double fixedPitchA, GBool rawOrderA, - GBool append); - - // Create a TextOutputDev which will write to a generic stream. If - // is true, the original physical layout of the text - // is maintained. If is true, the text is kept in - // content stream order. - TextOutputDev(TextOutputFunc func, void *stream, - GBool physLayoutA, double fixedPitchA, - 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; } - - // Does this device require incCharCount to be called for text on - // non-shown layers? - virtual GBool needCharCount() { 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 restoreState(GfxState *state); - - //----- update text state - virtual void updateFont(GfxState *state); - - //----- text drawing - virtual void beginString(GfxState *state, GString *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); - virtual void incCharCount(int nChars); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - - //----- link borders - virtual void processLink(Link *link); - - //----- special access - - // Find a string. If is true, starts looking at the - // top of the page; else if is true, starts looking - // immediately after the last find result; else starts looking at - // ,. If is true, stops looking at the - // bottom of the page; else if is true, stops looking - // just before the last find result; else stops looking at - // ,. - 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. - GString *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); - -#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 - double fixedPitch; // if physLayout is true and this is non-zero, - // assume fixed-pitch characters with this - // width - GBool rawOrder; // keep text in content stream order - GBool doHTML; // extra processing for HTML conversion - GBool ok; // set up ok? -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/UTF8.h b/thirdparty/xpdf/3.02/src/xpdf/UTF8.h deleted file mode 100644 index 8536dbf9..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/UTF8.h +++ /dev/null @@ -1,56 +0,0 @@ -//======================================================================== -// -// UTF8.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -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 { - return 0; - } -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.cc b/thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.cc deleted file mode 100644 index cc6a8139..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.cc +++ /dev/null @@ -1,296 +0,0 @@ -//======================================================================== -// -// UnicodeMap.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "gfile.h" -#include "GString.h" -#include "GList.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(GString *encodingNameA) { - FILE *f; - UnicodeMap *map; - UnicodeMapRange *range; - UnicodeMapExt *eMap; - int size, eMapsSize; - char buf[256]; - int line, nBytes, i, x; - char *tok1, *tok2, *tok3; - - if (!(f = globalParams->getUnicodeMapFile(encodingNameA))) { - error(errSyntaxError, -1, - "Couldn't find unicodeMap file for the '{0:t}' encoding", - encodingNameA); - 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(buf, " \t\r\n")) && - (tok2 = strtok(NULL, " \t\r\n"))) { - if (!(tok3 = strtok(NULL, " \t\r\n"))) { - 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(errSyntaxError, -1, - "Bad line ({0:d}) in unicodeMap file for the '{1:t}' encoding", - line, encodingNameA); - } - } else { - error(errSyntaxError, -1, - "Bad line ({0:d}) in unicodeMap file for the '{1:t}' encoding", - line, encodingNameA); - } - ++line; - } - - fclose(f); - - return map; -} - -UnicodeMap::UnicodeMap(GString *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 GString(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 GString(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(GString *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(GString *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/thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.h b/thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.h deleted file mode 100644 index 0f86101e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/UnicodeMap.h +++ /dev/null @@ -1,123 +0,0 @@ -//======================================================================== -// -// UnicodeMap.h -// -// Mapping from Unicode to an encoding. -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef UNICODEMAP_H -#define UNICODEMAP_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "GMutex.h" -#endif - -class GString; - -//------------------------------------------------------------------------ - -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 . Sets the - // initial reference count to 1. Returns NULL on failure. - static UnicodeMap *parse(GString *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(); - - GString *getEncodingName() { return encodingName; } - - GBool isUnicode() { return unicodeOut; } - - // Return true if this UnicodeMap matches the specified - // . - GBool match(GString *encodingNameA); - - // Map Unicode to the target encoding. Fills in with the - // output and returns the number of bytes used. Output will be - // truncated at bytes. No string terminator is written. - // Returns 0 if no mapping is found. - int mapUnicode(Unicode u, char *buf, int bufSize); - -private: - - UnicodeMap(GString *encodingNameA); - - GString *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 - GMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ - -#define unicodeMapCacheSize 4 - -class UnicodeMapCache { -public: - - UnicodeMapCache(); - ~UnicodeMapCache(); - - // Get the UnicodeMap for . Increments its reference - // count; there will be one reference for the cache plus one for the - // caller of this function. Returns NULL on failure. - UnicodeMap *getUnicodeMap(GString *encodingName); - -private: - - UnicodeMap *cache[unicodeMapCacheSize]; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/UnicodeMapTables.h b/thirdparty/xpdf/3.02/src/xpdf/UnicodeMapTables.h deleted file mode 100644 index 073e474e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/UnicodeMapTables.h +++ /dev/null @@ -1,365 +0,0 @@ -//======================================================================== -// -// UnicodeMapTables.h -// -// Copyright 2001-2009 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 }, - { 0xfb05, 0xfb05, 0x7374, 2 }, - { 0xfb06, 0xfb06, 0x7374, 2 } -}; -#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 }, - { 0xfb05, 0xfb05, 0x7374, 2 }, - { 0xfb06, 0xfb06, 0x7374, 2 } -}; -#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/thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.cc b/thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.cc deleted file mode 100644 index 77d3a085..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.cc +++ /dev/null @@ -1,953 +0,0 @@ -//======================================================================== -// -// UnicodeTypeTable.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include "CharTypes.h" -#include "UnicodeTypeTable.h" - -struct UnicodeMapTableEntry { - char *vector; - char type; -}; - -struct UnicodeCaseTableVector { - Unicode codes[256]; -}; - -static UnicodeMapTableEntry typeTable[256] = { - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN###NNNNN################NNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN#N####NNNNLNNNNN####NLNNN#LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL", 'X' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLNNNNNNNNNNNNNNLLNNNNNNNNNNNNNNLLLLLNNNNNNNNNLNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLNNNNNNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRNRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR", 'X' }, - { "RRRR#########RNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNN####################RRRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNRNNNNNNNRRNNNNNNNRR##########RRRRRR", 'X' }, - { "RRRRRRRRRRRRRRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'N' }, - { "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLNNNNLLLLLLLLLLLLLNNLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNLLLLLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLL##LLLLLLLNNNNN", 'X' }, - { "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLL##NNNNNNNNNNNNNN", 'X' }, - { "NNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLNLNNNLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNN#NLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNN#####LLLLLLLNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNNNNLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNLNNNNNLNNLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLNLLNNNNNNNNNNNLLLLLLL#LNLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL", 'X' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLNNNNNLLLLLLNLLLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { NULL, 'L' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNNNLLLLLLLLLLLNNNLLLLLLLLLLLLNNNNLLLLLLLLLLLLLNNNLLLLLLLLLLLLLNNN", 'X' }, - { "NNNNNNNNNNNNNNLRNNNNNNNNNNNNNNNNNNNNNNNNNNLRNLRN#####NNNNNNNNNNNNNNN#NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN#L##########NNNL############NNN###################################NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNLNNNNLNNLLLLLLLLLLNLNNNLLLLLNNNNNNLNLNLNLLLL#LLLNLLLLLLLNNLLLLNNNNNLLLLLNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNN##NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN####################LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN", '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' }, - { "LLLLLLLLLLLLLLLLLLLLLLLLRRRRRRNRRRRRRRRRR#RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR", 'X' }, - { NULL, 'R' }, - { "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN", 'X' }, - { "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN#N#NN#NNNNNNNNN#NN##NNNNN##NRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN", 'X' }, - { "NNN###NNNNN################NNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL#####NNN##NNNNNNNNNNNNNNNNNNNNNNNLL", 'X' } -}; - -static 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 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 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 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 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 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 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 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 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 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 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 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'; -} - -GBool unicodeTypeNum(Unicode c) { - return getType(c) == '#'; -} - -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; -} - diff --git a/thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.h b/thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.h deleted file mode 100644 index da676a25..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/UnicodeTypeTable.h +++ /dev/null @@ -1,22 +0,0 @@ -//======================================================================== -// -// UnicodeTypeTable.h -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef UNICODETYPETABLE_H -#define UNICODETYPETABLE_H - -#include "gtypes.h" - -extern GBool unicodeTypeL(Unicode c); - -extern GBool unicodeTypeR(Unicode c); - -extern GBool unicodeTypeNum(Unicode c); - -extern Unicode unicodeToUpper(Unicode c); - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFApp.cc b/thirdparty/xpdf/3.02/src/xpdf/XPDFApp.cc deleted file mode 100644 index 276b9a27..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFApp.cc +++ /dev/null @@ -1,448 +0,0 @@ -//======================================================================== -// -// XPDFApp.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "GString.h" -#include "GList.h" -#include "Error.h" -#include "XPDFViewer.h" -#include "XPDFApp.h" -#include "config.h" - -// these macro defns conflict with xpdf's Object class -#ifdef LESSTIF_VERSION -#undef XtDisplay -#undef XtScreen -#undef XtWindow -#undef XtParent -#undef XtIsRealized -#endif - -//------------------------------------------------------------------------ - -#define remoteCmdSize 512 - -//------------------------------------------------------------------------ - -static String fallbackResources[] = { - "*.zoomComboBox*fontList: -*-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1", - "*XmTextField.fontList: -*-courier-medium-r-normal--12-*-*-*-*-*-iso8859-1", - "*.fontList: -*-helvetica-medium-r-normal--12-*-*-*-*-*-iso8859-1", - "*XmTextField.translations: #override\\n" - " Ctrla:beginning-of-line()\\n" - " Ctrlb:backward-character()\\n" - " Ctrld:delete-next-character()\\n" - " Ctrle:end-of-line()\\n" - " Ctrlf:forward-character()\\n" - " Ctrlu:beginning-of-line()delete-to-end-of-line()\\n" - " Ctrlk:delete-to-end-of-line()\\n", - "*.toolTipEnable: True", - "*.toolTipPostDelay: 1500", - "*.toolTipPostDuration: 0", - "*.TipLabel.foreground: black", - "*.TipLabel.background: LightYellow", - "*.TipShell.borderWidth: 1", - "*.TipShell.borderColor: black", - NULL -}; - -static XrmOptionDescRec xOpts[] = { - {"-display", ".display", XrmoptionSepArg, NULL}, - {"-foreground", "*Foreground", XrmoptionSepArg, NULL}, - {"-fg", "*Foreground", XrmoptionSepArg, NULL}, - {"-background", "*Background", XrmoptionSepArg, NULL}, - {"-bg", "*Background", XrmoptionSepArg, NULL}, - {"-geometry", ".geometry", XrmoptionSepArg, NULL}, - {"-g", ".geometry", XrmoptionSepArg, NULL}, - {"-font", "*.fontList", XrmoptionSepArg, NULL}, - {"-fn", "*.fontList", XrmoptionSepArg, NULL}, - {"-title", ".title", XrmoptionSepArg, NULL}, - {"-cmap", ".installCmap", XrmoptionNoArg, (XPointer)"on"}, - {"-rgb", ".rgbCubeSize", XrmoptionSepArg, NULL}, - {"-rv", ".reverseVideo", XrmoptionNoArg, (XPointer)"true"}, - {"-papercolor", ".paperColor", XrmoptionSepArg, NULL}, - {"-mattecolor", ".matteColor", XrmoptionSepArg, NULL}, - {"-z", ".initialZoom", XrmoptionSepArg, NULL} -}; - -#define nXOpts (sizeof(xOpts) / sizeof(XrmOptionDescRec)) - -struct XPDFAppResources { - String geometry; - String title; - Bool installCmap; - int rgbCubeSize; - Bool reverseVideo; - String paperColor; - String matteColor; - String fullScreenMatteColor; - String initialZoom; -}; - -static Bool defInstallCmap = False; -static int defRGBCubeSize = defaultRGBCube; -static Bool defReverseVideo = False; - -static XtResource xResources[] = { - { "geometry", "Geometry", XtRString, sizeof(String), XtOffsetOf(XPDFAppResources, geometry), XtRString, (XtPointer)NULL }, - { "title", "Title", XtRString, sizeof(String), XtOffsetOf(XPDFAppResources, title), XtRString, (XtPointer)NULL }, - { "installCmap", "InstallCmap", XtRBool, sizeof(Bool), XtOffsetOf(XPDFAppResources, installCmap), XtRBool, (XtPointer)&defInstallCmap }, - { "rgbCubeSize", "RgbCubeSize", XtRInt, sizeof(int), XtOffsetOf(XPDFAppResources, rgbCubeSize), XtRInt, (XtPointer)&defRGBCubeSize }, - { "reverseVideo", "ReverseVideo", XtRBool, sizeof(Bool), XtOffsetOf(XPDFAppResources, reverseVideo), XtRBool, (XtPointer)&defReverseVideo }, - { "paperColor", "PaperColor", XtRString, sizeof(String), XtOffsetOf(XPDFAppResources, paperColor), XtRString, (XtPointer)NULL }, - { "matteColor", "MatteColor", XtRString, sizeof(String), XtOffsetOf(XPDFAppResources, matteColor), XtRString, (XtPointer)"gray50" }, - { "fullScreenMatteColor", "FullScreenMatteColor", XtRString, sizeof(String), XtOffsetOf(XPDFAppResources, fullScreenMatteColor), XtRString, (XtPointer)"black" }, - { "initialZoom", "InitialZoom", XtRString, sizeof(String), XtOffsetOf(XPDFAppResources, initialZoom), XtRString, (XtPointer)NULL } -}; - -#define nXResources (sizeof(xResources) / sizeof(XtResource)) - -//------------------------------------------------------------------------ -// XPDFApp -//------------------------------------------------------------------------ - -#if 0 //~ for debugging -static int xErrorHandler(Display *display, XErrorEvent *ev) { - printf("X error:\n"); - printf(" resource ID = %08lx\n", ev->resourceid); - printf(" serial = %lu\n", ev->serial); - printf(" error_code = %d\n", ev->error_code); - printf(" request_code = %d\n", ev->request_code); - printf(" minor_code = %d\n", ev->minor_code); - fflush(stdout); - abort(); -} -#endif - -XPDFApp::XPDFApp(int *argc, char *argv[]) { - appShell = XtAppInitialize(&appContext, xpdfAppName, xOpts, nXOpts, - argc, argv, fallbackResources, NULL, 0); - display = XtDisplay(appShell); - screenNum = XScreenNumberOfScreen(XtScreen(appShell)); -#if XmVERSION > 1 - XtVaSetValues(XmGetXmDisplay(XtDisplay(appShell)), - XmNenableButtonTab, True, NULL); -#endif -#if XmVERSION > 1 - // Drag-and-drop appears to be buggy -- I'm seeing weird crashes - // deep in the Motif code when I destroy widgets in the XpdfForms - // code. Xpdf doesn't use it, so just turn it off. - XtVaSetValues(XmGetXmDisplay(XtDisplay(appShell)), - XmNdragInitiatorProtocolStyle, XmDRAG_NONE, - XmNdragReceiverProtocolStyle, XmDRAG_NONE, - NULL); -#endif - -#if 0 //~ for debugging - XSynchronize(display, True); - XSetErrorHandler(&xErrorHandler); -#endif - - fullScreen = gFalse; - remoteAtom = None; - remoteViewer = NULL; - remoteWin = None; - - getResources(); - - viewers = new GList(); - -} - -void XPDFApp::getResources() { - XPDFAppResources resources; - XColor xcol, xcol2; - Colormap colormap; - - XtGetApplicationResources(appShell, &resources, xResources, nXResources, - NULL, 0); - geometry = resources.geometry ? new GString(resources.geometry) - : (GString *)NULL; - title = resources.title ? new GString(resources.title) : (GString *)NULL; - installCmap = (GBool)resources.installCmap; - rgbCubeSize = resources.rgbCubeSize; - reverseVideo = (GBool)resources.reverseVideo; - if (reverseVideo) { - paperRGB[0] = paperRGB[1] = paperRGB[2] = 0; - paperPixel = BlackPixel(display, screenNum); - } else { - paperRGB[0] = paperRGB[1] = paperRGB[2] = 0xff; - paperPixel = WhitePixel(display, screenNum); - } - XtVaGetValues(appShell, XmNcolormap, &colormap, NULL); - if (resources.paperColor) { - if (XAllocNamedColor(display, colormap, resources.paperColor, - &xcol, &xcol2)) { - paperRGB[0] = xcol.red >> 8; - paperRGB[1] = xcol.green >> 8; - paperRGB[2] = xcol.blue >> 8; - paperPixel = xcol.pixel; - } else { - error(errIO, -1, "Couldn't allocate color '{0:s}'", - resources.paperColor); - } - } - if (XAllocNamedColor(display, colormap, resources.matteColor, - &xcol, &xcol2)) { - mattePixel = xcol.pixel; - } else { - mattePixel = paperPixel; - } - if (XAllocNamedColor(display, colormap, resources.fullScreenMatteColor, - &xcol, &xcol2)) { - fullScreenMattePixel = xcol.pixel; - } else { - fullScreenMattePixel = paperPixel; - } - initialZoom = resources.initialZoom ? new GString(resources.initialZoom) - : (GString *)NULL; -} - -XPDFApp::~XPDFApp() { - deleteGList(viewers, XPDFViewer); - if (geometry) { - delete geometry; - } - if (title) { - delete title; - } - if (initialZoom) { - delete initialZoom; - } -} - -XPDFViewer *XPDFApp::open(GString *fileName, int page, - GString *ownerPassword, GString *userPassword) { - XPDFViewer *viewer; - - viewer = new XPDFViewer(this, fileName, page, NULL, fullScreen, - ownerPassword, userPassword); - if (!viewer->isOk()) { - delete viewer; - return NULL; - } - if (remoteAtom != None) { - remoteViewer = viewer; - remoteWin = viewer->getWindow(); - XtAddEventHandler(remoteWin, PropertyChangeMask, False, - &remoteMsgCbk, this); - XSetSelectionOwner(display, remoteAtom, XtWindow(remoteWin), CurrentTime); - } - viewers->append(viewer); - return viewer; -} - -XPDFViewer *XPDFApp::openAtDest(GString *fileName, GString *dest, - GString *ownerPassword, - GString *userPassword) { - XPDFViewer *viewer; - - viewer = new XPDFViewer(this, fileName, 1, dest, fullScreen, - ownerPassword, userPassword); - if (!viewer->isOk()) { - delete viewer; - return NULL; - } - if (remoteAtom != None) { - remoteViewer = viewer; - remoteWin = viewer->getWindow(); - XtAddEventHandler(remoteWin, PropertyChangeMask, False, - &remoteMsgCbk, this); - XSetSelectionOwner(display, remoteAtom, XtWindow(remoteWin), CurrentTime); - } - viewers->append(viewer); - return viewer; -} - -XPDFViewer *XPDFApp::reopen(XPDFViewer *viewer, PDFDoc *doc, int page, - GBool fullScreenA) { - int i; - - for (i = 0; i < viewers->getLength(); ++i) { - if (((XPDFViewer *)viewers->get(i)) == viewer) { - viewers->del(i); - delete viewer; - } - } - viewer = new XPDFViewer(this, doc, page, NULL, fullScreenA); - if (!viewer->isOk()) { - delete viewer; - return NULL; - } - if (remoteAtom != None) { - remoteViewer = viewer; - remoteWin = viewer->getWindow(); - XtAddEventHandler(remoteWin, PropertyChangeMask, False, - &remoteMsgCbk, this); - XSetSelectionOwner(display, remoteAtom, XtWindow(remoteWin), CurrentTime); - } - viewers->append(viewer); - return viewer; -} - -void XPDFApp::close(XPDFViewer *viewer, GBool closeLast) { - int i; - - if (viewers->getLength() == 1) { - if (viewer != (XPDFViewer *)viewers->get(0)) { - return; - } - if (closeLast) { - quit(); - } else { - viewer->clear(); - } - } else { - for (i = 0; i < viewers->getLength(); ++i) { - if (((XPDFViewer *)viewers->get(i)) == viewer) { - viewers->del(i); - if (remoteAtom != None && remoteViewer == viewer) { - remoteViewer = (XPDFViewer *)viewers->get(viewers->getLength() - 1); - remoteWin = remoteViewer->getWindow(); - XSetSelectionOwner(display, remoteAtom, XtWindow(remoteWin), - CurrentTime); - } - delete viewer; - return; - } - } - } -} - -void XPDFApp::quit() { - if (remoteAtom != None) { - XSetSelectionOwner(display, remoteAtom, None, CurrentTime); - } - while (viewers->getLength() > 0) { - delete (XPDFViewer *)viewers->del(0); - } -#if HAVE_XTAPPSETEXITFLAG - XtAppSetExitFlag(appContext); -#else - exit(0); -#endif -} - -void XPDFApp::run() { - XtAppMainLoop(appContext); -} - -void XPDFApp::setRemoteName(char *remoteName) { - remoteAtom = XInternAtom(display, remoteName, False); - remoteXWin = XGetSelectionOwner(display, remoteAtom); -} - -GBool XPDFApp::remoteServerRunning() { - return remoteXWin != None; -} - -void XPDFApp::remoteExec(char *cmd) { - char cmd2[remoteCmdSize]; - int n; - - n = strlen(cmd); - if (n > remoteCmdSize - 2) { - n = remoteCmdSize - 2; - } - memcpy(cmd2, cmd, n); - cmd2[n] = '\n'; - cmd2[n+1] = '\0'; - XChangeProperty(display, remoteXWin, remoteAtom, remoteAtom, 8, - PropModeReplace, (Guchar *)cmd2, n + 2); - XFlush(display); -} - -void XPDFApp::remoteOpen(GString *fileName, int page, GBool raise) { - char cmd[remoteCmdSize]; - - sprintf(cmd, "openFileAtPage(%.200s,%d)\n", - fileName->getCString(), page); - if (raise) { - strcat(cmd, "raise\n"); - } - XChangeProperty(display, remoteXWin, remoteAtom, remoteAtom, 8, - PropModeReplace, (Guchar *)cmd, strlen(cmd) + 1); - XFlush(display); -} - -void XPDFApp::remoteOpenAtDest(GString *fileName, GString *dest, GBool raise) { - char cmd[remoteCmdSize]; - - sprintf(cmd, "openFileAtDest(%.200s,%.256s)\n", - fileName->getCString(), dest->getCString()); - if (raise) { - strcat(cmd, "raise\n"); - } - XChangeProperty(display, remoteXWin, remoteAtom, remoteAtom, 8, - PropModeReplace, (Guchar *)cmd, strlen(cmd) + 1); - XFlush(display); -} - -void XPDFApp::remoteReload(GBool raise) { - char cmd[remoteCmdSize]; - - strcpy(cmd, "reload\n"); - if (raise) { - strcat(cmd, "raise\n"); - } - XChangeProperty(display, remoteXWin, remoteAtom, remoteAtom, 8, - PropModeReplace, (Guchar *)cmd, strlen(cmd) + 1); - XFlush(display); -} - -void XPDFApp::remoteRaise() { - XChangeProperty(display, remoteXWin, remoteAtom, remoteAtom, 8, - PropModeReplace, (Guchar *)"raise\n", 7); - XFlush(display); -} - -void XPDFApp::remoteQuit() { - XChangeProperty(display, remoteXWin, remoteAtom, remoteAtom, 8, - PropModeReplace, (Guchar *)"quit\n", 6); - XFlush(display); -} - -void XPDFApp::remoteMsgCbk(Widget widget, XtPointer ptr, - XEvent *event, Boolean *cont) { - XPDFApp *app = (XPDFApp *)ptr; - char *cmd, *p0, *p1; - Atom type; - int format; - Gulong size, remain; - GString *cmdStr; - - if (event->xproperty.atom != app->remoteAtom) { - *cont = True; - return; - } - *cont = False; - - if (XGetWindowProperty(app->display, XtWindow(app->remoteWin), - app->remoteAtom, 0, remoteCmdSize/4, - True, app->remoteAtom, - &type, &format, &size, &remain, - (Guchar **)&cmd) != Success) { - return; - } - if (!cmd) { - return; - } - p0 = cmd; - while (*p0 && (p1 = strchr(p0, '\n'))) { - cmdStr = new GString(p0, p1 - p0); - app->remoteViewer->execCmd(cmdStr, NULL); - delete cmdStr; - p0 = p1 + 1; - } - XFree((XPointer)cmd); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFApp.h b/thirdparty/xpdf/3.02/src/xpdf/XPDFApp.h deleted file mode 100644 index 9d4060ac..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFApp.h +++ /dev/null @@ -1,114 +0,0 @@ -//======================================================================== -// -// XPDFApp.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XPDFAPP_H -#define XPDFAPP_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#define Object XtObject -#include -#undef Object -#include "gtypes.h" -#include "SplashTypes.h" - -class GString; -class GList; -class PDFDoc; -class XPDFViewer; - -//------------------------------------------------------------------------ - -#define xpdfAppName "Xpdf" - -//------------------------------------------------------------------------ -// XPDFApp -//------------------------------------------------------------------------ - -class XPDFApp { -public: - - XPDFApp(int *argc, char *argv[]); - ~XPDFApp(); - - XPDFViewer *open(GString *fileName, int page = 1, - GString *ownerPassword = NULL, - GString *userPassword = NULL); - XPDFViewer *openAtDest(GString *fileName, GString *dest, - GString *ownerPassword = NULL, - GString *userPassword = NULL); - XPDFViewer *reopen(XPDFViewer *viewer, PDFDoc *doc, int page, - GBool fullScreenA); - void close(XPDFViewer *viewer, GBool closeLast); - void quit(); - - void run(); - - //----- remote server - void setRemoteName(char *remoteName); - GBool remoteServerRunning(); - void remoteExec(char *cmd); - void remoteOpen(GString *fileName, int page, GBool raise); - void remoteOpenAtDest(GString *fileName, GString *dest, GBool raise); - void remoteReload(GBool raise); - void remoteRaise(); - void remoteQuit(); - - //----- resource/option values - GString *getGeometry() { return geometry; } - GString *getTitle() { return title; } - GBool getInstallCmap() { return installCmap; } - int getRGBCubeSize() { return rgbCubeSize; } - GBool getReverseVideo() { return reverseVideo; } - SplashColorPtr getPaperRGB() { return paperRGB; } - Gulong getPaperPixel() { return paperPixel; } - Gulong getMattePixel(GBool fullScreenA) - { return fullScreenA ? fullScreenMattePixel : mattePixel; } - GString *getInitialZoom() { return initialZoom; } - void setFullScreen(GBool fullScreenA) { fullScreen = fullScreenA; } - GBool getFullScreen() { return fullScreen; } - - XtAppContext getAppContext() { return appContext; } - Widget getAppShell() { return appShell; } - -private: - - void getResources(); - static void remoteMsgCbk(Widget widget, XtPointer ptr, - XEvent *event, Boolean *cont); - - Display *display; - int screenNum; - XtAppContext appContext; - Widget appShell; - GList *viewers; // [XPDFViewer] - - Atom remoteAtom; - Window remoteXWin; - XPDFViewer *remoteViewer; - Widget remoteWin; - - //----- resource/option values - GString *geometry; - GString *title; - GBool installCmap; - int rgbCubeSize; - GBool reverseVideo; - SplashColor paperRGB; - Gulong paperPixel; - Gulong mattePixel; - Gulong fullScreenMattePixel; - GString *initialZoom; - GBool fullScreen; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFCore.cc b/thirdparty/xpdf/3.02/src/xpdf/XPDFCore.cc deleted file mode 100644 index b4ba1ccf..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFCore.cc +++ /dev/null @@ -1,1695 +0,0 @@ -//======================================================================== -// -// XPDFCore.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "gmem.h" -#include "GString.h" -#include "GList.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PDFDoc.h" -#include "Link.h" -#include "ErrorCodes.h" -#include "GfxState.h" -#include "CoreOutputDev.h" -#include "PSOutputDev.h" -#include "TextOutputDev.h" -#include "SplashBitmap.h" -#include "SplashPattern.h" -#include "XPDFApp.h" -#ifdef HIGHLIGHTED_REGIONS -#include "HighlightFile.h" -#endif -#include "XPDFCore.h" - -// these macro defns conflict with xpdf's Object class -#ifdef LESSTIF_VERSION -#undef XtDisplay -#undef XtScreen -#undef XtWindow -#undef XtParent -#undef XtIsRealized -#endif - -//------------------------------------------------------------------------ - -// 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); -} - -//------------------------------------------------------------------------ - -GString *XPDFCore::currentSelection = NULL; -XPDFCore *XPDFCore::currentSelectionOwner = NULL; -Atom XPDFCore::targetsAtom; - -//------------------------------------------------------------------------ -// XPDFCoreTile -//------------------------------------------------------------------------ - -class XPDFCoreTile: public PDFCoreTile { -public: - XPDFCoreTile(int xDestA, int yDestA); - virtual ~XPDFCoreTile(); - XImage *image; -}; - -XPDFCoreTile::XPDFCoreTile(int xDestA, int yDestA): - PDFCoreTile(xDestA, yDestA) -{ - image = NULL; -} - -XPDFCoreTile::~XPDFCoreTile() { - if (image) { - gfree(image->data); - image->data = NULL; - XDestroyImage(image); - } -} - -//------------------------------------------------------------------------ -// XPDFCore -//------------------------------------------------------------------------ - -XPDFCore::XPDFCore(Widget shellA, Widget parentWidgetA, - SplashColorPtr paperColorA, Gulong paperPixelA, - Gulong mattePixelA, GBool fullScreenA, GBool reverseVideoA, - GBool installCmap, int rgbCubeSizeA): - PDFCore(splashModeRGB8, 4, reverseVideoA, paperColorA, !fullScreenA) -{ - GString *initialZoom; - - shell = shellA; - parentWidget = parentWidgetA; - display = XtDisplay(parentWidget); - screenNum = XScreenNumberOfScreen(XtScreen(parentWidget)); - targetsAtom = XInternAtom(display, "TARGETS", False); - - paperPixel = paperPixelA; - mattePixel = mattePixelA; - fullScreen = fullScreenA; - - setupX(installCmap, rgbCubeSizeA); - - scrolledWin = NULL; - hScrollBar = NULL; - vScrollBar = NULL; - drawAreaFrame = NULL; - drawArea = NULL; - - // get the initial zoom value - if (fullScreen) { - zoom = zoomPage; - } else { - initialZoom = globalParams->getInitialZoom(); - if (!initialZoom->cmp("page")) { - zoom = zoomPage; - } else if (!initialZoom->cmp("width")) { - zoom = zoomWidth; - } else { - zoom = atoi(initialZoom->getCString()); - if (zoom <= 0) { - zoom = defZoom; - } - } - delete initialZoom; - } - - linkAction = NULL; - - panning = gFalse; - - updateCbk = NULL; - actionCbk = NULL; - keyPressCbk = NULL; - mouseCbk = NULL; - - // optional features default to on - hyperlinksEnabled = gTrue; - selectEnabled = gTrue; - - // do X-specific initialization and create the widgets - initWindow(); - initPasswordDialog(); -} - -XPDFCore::~XPDFCore() { - if (currentSelectionOwner == this && currentSelection) { - delete currentSelection; - currentSelection = NULL; - currentSelectionOwner = NULL; - } - if (drawAreaGC) { - XFreeGC(display, drawAreaGC); - } - if (scrolledWin) { - XtDestroyWidget(scrolledWin); - } - if (busyCursor) { - XFreeCursor(display, busyCursor); - } - if (linkCursor) { - XFreeCursor(display, linkCursor); - } - if (selectCursor) { - XFreeCursor(display, selectCursor); - } -} - -//------------------------------------------------------------------------ -// loadFile / displayPage / displayDest -//------------------------------------------------------------------------ - -int XPDFCore::loadFile(GString *fileName, GString *ownerPassword, - GString *userPassword) { - int err; - - err = PDFCore::loadFile(fileName, ownerPassword, userPassword); - if (err == errNone) { - // save the modification time - modTime = getModTime(doc->getFileName()->getCString()); - - // update the parent window - if (updateCbk) { - (*updateCbk)(updateCbkData, doc->getFileName(), -1, - doc->getNumPages(), NULL); - } - } - return err; -} - -int XPDFCore::loadFile(BaseStream *stream, GString *ownerPassword, - GString *userPassword) { - int err; - - err = PDFCore::loadFile(stream, ownerPassword, userPassword); - if (err == errNone) { - // no file - modTime = 0; - - // update the parent window - if (updateCbk) { - (*updateCbk)(updateCbkData, doc->getFileName(), -1, - doc->getNumPages(), NULL); - } - } - return err; -} - -void XPDFCore::loadDoc(PDFDoc *docA) { - PDFCore::loadDoc(docA); - - // save the modification time - if (doc->getFileName()) { - modTime = getModTime(doc->getFileName()->getCString()); - } - - // update the parent window - if (updateCbk) { - (*updateCbk)(updateCbkData, doc->getFileName(), -1, - doc->getNumPages(), NULL); - } -} - -void XPDFCore::resizeToPage(int pg) { - Dimension width, height; - double width1, height1; - Dimension topW, topH, topBorder, daW, daH; - Dimension displayW, displayH; - - displayW = DisplayWidth(display, screenNum); - displayH = DisplayHeight(display, screenNum); - if (fullScreen) { - width = displayW; - height = displayH; - } else { - if (!doc || pg <= 0 || pg > doc->getNumPages()) { - width1 = 612; - height1 = 792; - } else if (doc->getPageRotate(pg) == 90 || - doc->getPageRotate(pg) == 270) { - width1 = doc->getPageCropHeight(pg); - height1 = doc->getPageCropWidth(pg); - } else { - width1 = doc->getPageCropWidth(pg); - height1 = doc->getPageCropHeight(pg); - } - if (zoom == zoomPage || zoom == zoomWidth) { - width = (Dimension)(width1 * 0.01 * defZoom + 0.5); - height = (Dimension)(height1 * 0.01 * defZoom + 0.5); - } else { - width = (Dimension)(width1 * 0.01 * zoom + 0.5); - height = (Dimension)(height1 * 0.01 * zoom + 0.5); - } - if (continuousMode) { - height += continuousModePageSpacing; - } - if (width > displayW - 100) { - width = displayW - 100; - } - if (height > displayH - 100) { - height = displayH - 100; - } - } - - if (XtIsRealized(shell)) { - XtVaGetValues(shell, XmNwidth, &topW, XmNheight, &topH, - XmNborderWidth, &topBorder, NULL); - XtVaGetValues(drawArea, XmNwidth, &daW, XmNheight, &daH, NULL); - XtVaSetValues(shell, XmNwidth, width + (topW - daW), - XmNheight, height + (topH - daH), NULL); - } else { - XtVaSetValues(drawArea, XmNwidth, width, XmNheight, height, NULL); - } -} - -void XPDFCore::update(int topPageA, int scrollXA, int scrollYA, - double zoomA, int rotateA, GBool force, - GBool addToHist, GBool adjustScrollX) { - int oldPage; - - oldPage = topPage; - PDFCore::update(topPageA, scrollXA, scrollYA, zoomA, rotateA, - force, addToHist, adjustScrollX); - linkAction = NULL; - if (doc && topPage != oldPage) { - if (updateCbk) { - (*updateCbk)(updateCbkData, NULL, topPage, -1, ""); - } - } -} - -GBool XPDFCore::checkForNewFile() { - time_t newModTime; - - if (doc->getFileName()) { - newModTime = getModTime(doc->getFileName()->getCString()); - if (newModTime != modTime) { - modTime = newModTime; - return gTrue; - } - } - return gFalse; -} - -//------------------------------------------------------------------------ -// page/position changes -//------------------------------------------------------------------------ - -GBool XPDFCore::gotoNextPage(int inc, GBool top) { - if (!PDFCore::gotoNextPage(inc, top)) { - XBell(display, 0); - return gFalse; - } - return gTrue; -} - -GBool XPDFCore::gotoPrevPage(int dec, GBool top, GBool bottom) { - if (!PDFCore::gotoPrevPage(dec, top, bottom)) { - XBell(display, 0); - return gFalse; - } - return gTrue; -} - -GBool XPDFCore::goForward() { - if (!PDFCore::goForward()) { - XBell(display, 0); - return gFalse; - } - return gTrue; -} - -GBool XPDFCore::goBackward() { - if (!PDFCore::goBackward()) { - XBell(display, 0); - return gFalse; - } - return gTrue; -} - -void XPDFCore::startPan(int wx, int wy) { - panning = gTrue; - panMX = wx; - panMY = wy; -} - -void XPDFCore::endPan(int wx, int wy) { - panning = gFalse; -} - -//------------------------------------------------------------------------ -// selection -//------------------------------------------------------------------------ - -void XPDFCore::startSelection(int wx, int wy) { - int pg, x, y; - - takeFocus(); - if (doc && doc->getNumPages() > 0) { - if (selectEnabled) { - if (cvtWindowToDev(wx, wy, &pg, &x, &y)) { - setSelection(pg, x, y, x, y); -#ifdef HIGHLIGHTED_REGIONS - if (findSelectedRegion(pg, x, y)) { - xorHighlight(selectedRegion, highlightNormal, highlightSelected); - if (regionResizeX || regionResizeY) { - setCursor(selectCursor); - } - } else { - setCursor(selectCursor); - dragging = gTrue; - } -#else - setCursor(selectCursor); - dragging = gTrue; -#endif - } - } - } -} - -void XPDFCore::endSelection(int wx, int wy) { - int pg, x, y; - GBool ok; - - if (doc && doc->getNumPages() > 0) { - ok = cvtWindowToDev(wx, wy, &pg, &x, &y); - if (dragging) { - dragging = gFalse; - setCursor(None); - if (ok) { - moveSelection(pg, x, y); - } -#ifndef NO_TEXT_SELECT - if (selectULX != selectLRX && - selectULY != selectLRY) { - if (doc->okToCopy()) { - copySelection(); - } else { - error(errNotAllowed, -1, - "Copying of text from this document is not allowed."); - } - } -#endif - } -#ifdef HIGHLIGHTED_REGIONS - if (selectedRegion && (regionResizeX || regionResizeY)) { - regionResizeX = regionResizeY = 0; - setCursor(None); - if (ok) { - resizeRegion(pg, x, y); - } - } -#endif - } -} - -// X's copy-and-paste mechanism is brain damaged. Xt doesn't help -// any, but doesn't make it too much worse, either. Motif, on the -// other hand, adds significant complexity to the mess. So here we -// blow off the Motif junk and stick to plain old Xt. The next two -// functions (copySelection and convertSelectionCbk) implement the -// magic needed to deal with Xt's mechanism. Note that this requires -// global variables (currentSelection and currentSelectionOwner). - -void XPDFCore::copySelection() { - int pg; - double ulx, uly, lrx, lry; - - if (!doc->okToCopy()) { - return; - } - if (getSelection(&pg, &ulx, &uly, &lrx, &lry)) { - //~ for multithreading: need a mutex here - if (currentSelection) { - delete currentSelection; - } - currentSelection = extractText(pg, ulx, uly, lrx, lry); - currentSelectionOwner = this; - XtOwnSelection(drawArea, XA_PRIMARY, XtLastTimestampProcessed(display), - &convertSelectionCbk, NULL, NULL); - } -} - -Boolean XPDFCore::convertSelectionCbk(Widget widget, Atom *selection, - Atom *target, Atom *type, - XtPointer *value, unsigned long *length, - int *format) { - Atom *array; - - // send back a list of supported conversion targets - if (*target == targetsAtom) { - if (!(array = (Atom *)XtMalloc(sizeof(Atom)))) { - return False; - } - array[0] = XA_STRING; - *value = (XtPointer)array; - *type = XA_ATOM; - *format = 32; - *length = 1; - return True; - - // send the selected text - } else if (*target == XA_STRING) { - //~ for multithreading: need a mutex here - *value = XtNewString(currentSelection->getCString()); - *length = currentSelection->getLength(); - *type = XA_STRING; - *format = 8; // 8-bit elements - return True; - } - - return False; -} - -//------------------------------------------------------------------------ -// hyperlinks -//------------------------------------------------------------------------ - -void XPDFCore::doAction(LinkAction *action) { - LinkActionKind kind; - LinkDest *dest; - GString *namedDest; - char *s; - GString *fileName, *fileName2; - GString *cmd; - GString *actionName; - Object movieAnnot, obj1, obj2; - GString *msg; - int i; - - switch (kind = action->getKind()) { - - // GoTo / GoToR action - case actionGoTo: - case actionGoToR: - if (kind == actionGoTo) { - dest = NULL; - namedDest = NULL; - if ((dest = ((LinkGoTo *)action)->getDest())) { - dest = dest->copy(); - } else if ((namedDest = ((LinkGoTo *)action)->getNamedDest())) { - namedDest = namedDest->copy(); - } - } else { - dest = NULL; - namedDest = NULL; - if ((dest = ((LinkGoToR *)action)->getDest())) { - dest = dest->copy(); - } else if ((namedDest = ((LinkGoToR *)action)->getNamedDest())) { - namedDest = namedDest->copy(); - } - s = ((LinkGoToR *)action)->getFileName()->getCString(); - //~ translate path name for VMS (deal with '/') - if (isAbsolutePath(s)) { - fileName = new GString(s); - } else { - fileName = appendToPath(grabPath(doc->getFileName()->getCString()), s); - } - if (loadFile(fileName) != errNone) { - if (dest) { - delete dest; - } - if (namedDest) { - delete namedDest; - } - delete fileName; - return; - } - delete fileName; - } - if (namedDest) { - dest = doc->findDest(namedDest); - delete namedDest; - } - if (dest) { - displayDest(dest, zoom, rotate, gTrue); - delete dest; - } else { - if (kind == actionGoToR) { - displayPage(1, zoom, 0, gFalse, gTrue); - } - } - break; - - // Launch action - case actionLaunch: - fileName = ((LinkLaunch *)action)->getFileName(); - s = fileName->getCString(); - if (!strcmp(s + fileName->getLength() - 4, ".pdf") || - !strcmp(s + fileName->getLength() - 4, ".PDF")) { - //~ translate path name for VMS (deal with '/') - if (isAbsolutePath(s)) { - fileName = fileName->copy(); - } else { - fileName = appendToPath(grabPath(doc->getFileName()->getCString()), s); - } - if (loadFile(fileName) != errNone) { - delete fileName; - return; - } - delete fileName; - displayPage(1, zoom, rotate, gFalse, gTrue); - } else { - fileName = fileName->copy(); - if (((LinkLaunch *)action)->getParams()) { - fileName->append(' '); - fileName->append(((LinkLaunch *)action)->getParams()); - } -#ifdef VMS - fileName->insert(0, "spawn/nowait "); -#elif defined(__EMX__) - fileName->insert(0, "start /min /n "); -#else - fileName->append(" &"); -#endif - if (globalParams->getLaunchCommand()) { - fileName->insert(0, ' '); - fileName->insert(0, globalParams->getLaunchCommand()); - system(fileName->getCString()); - } else { - msg = new GString("About to execute the command:\n"); - msg->append(fileName); - if (doQuestionDialog("Launching external application", msg)) { - system(fileName->getCString()); - } - delete msg; - } - delete fileName; - } - break; - - // URI action - case actionURI: - if (!(cmd = globalParams->getURLCommand())) { - error(errConfig, -1, "No urlCommand defined in config file"); - break; - } - runCommand(cmd, ((LinkURI *)action)->getURI()); - break; - - // Named action - case actionNamed: - actionName = ((LinkNamed *)action)->getName(); - if (!actionName->cmp("NextPage")) { - gotoNextPage(1, gTrue); - } else if (!actionName->cmp("PrevPage")) { - gotoPrevPage(1, gTrue, gFalse); - } else if (!actionName->cmp("FirstPage")) { - if (topPage != 1) { - displayPage(1, zoom, rotate, gTrue, gTrue); - } - } else if (!actionName->cmp("LastPage")) { - if (topPage != doc->getNumPages()) { - displayPage(doc->getNumPages(), zoom, rotate, gTrue, gTrue); - } - } else if (!actionName->cmp("GoBack")) { - goBackward(); - } else if (!actionName->cmp("GoForward")) { - goForward(); - } else if (!actionName->cmp("Quit")) { - if (actionCbk) { - (*actionCbk)(actionCbkData, actionName->getCString()); - } - } else { - error(errSyntaxError, -1, - "Unknown named action: '{0:t}'", actionName); - } - break; - - // Movie action - case actionMovie: - if (!(cmd = globalParams->getMovieCommand())) { - error(errConfig, -1, "No movieCommand defined in config file"); - break; - } - if (((LinkMovie *)action)->hasAnnotRef()) { - doc->getXRef()->fetch(((LinkMovie *)action)->getAnnotRef()->num, - ((LinkMovie *)action)->getAnnotRef()->gen, - &movieAnnot); - } else { - //~ need to use the correct page num here - doc->getCatalog()->getPage(topPage)->getAnnots(&obj1); - if (obj1.isArray()) { - for (i = 0; i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGet(i, &movieAnnot)->isDict()) { - if (movieAnnot.dictLookup("Subtype", &obj2)->isName("Movie")) { - obj2.free(); - break; - } - obj2.free(); - } - movieAnnot.free(); - } - obj1.free(); - } - } - if (movieAnnot.isDict()) { - if (movieAnnot.dictLookup("Movie", &obj1)->isDict()) { - if (obj1.dictLookup("F", &obj2)) { - if ((fileName = LinkAction::getFileSpecName(&obj2))) { - if (!isAbsolutePath(fileName->getCString())) { - fileName2 = appendToPath( - grabPath(doc->getFileName()->getCString()), - fileName->getCString()); - delete fileName; - fileName = fileName2; - } - runCommand(cmd, fileName); - delete fileName; - } - obj2.free(); - } - obj1.free(); - } - } - movieAnnot.free(); - break; - - // unknown action type - case actionUnknown: - error(errSyntaxError, -1, "Unknown link action type: '{0:t}'", - ((LinkUnknown *)action)->getAction()); - break; - } -} - -// Run a command, given a string with one '%s' in it, and an -// string to insert in place of the '%s'. -void XPDFCore::runCommand(GString *cmdFmt, GString *arg) { - GString *cmd; - char *s; - - if ((s = strstr(cmdFmt->getCString(), "%s"))) { - cmd = mungeURL(arg); - cmd->insert(0, cmdFmt->getCString(), - s - cmdFmt->getCString()); - cmd->append(s + 2); - } else { - cmd = cmdFmt->copy(); - } -#ifdef VMS - cmd->insert(0, "spawn/nowait "); -#elif defined(__EMX__) - cmd->insert(0, "start /min /n "); -#else - cmd->append(" &"); -#endif - system(cmd->getCString()); - delete cmd; -} - -// Escape any characters in a URL which might cause problems when -// calling system(). -GString *XPDFCore::mungeURL(GString *url) { - static char *allowed = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz" - "0123456789" - "-_.~/?:@&=+,#%"; - GString *newURL; - char c; - char buf[4]; - int i; - - newURL = new GString(); - for (i = 0; i < url->getLength(); ++i) { - c = url->getChar(i); - if (strchr(allowed, c)) { - newURL->append(c); - } else { - sprintf(buf, "%%%02x", c & 0xff); - newURL->append(buf); - } - } - return newURL; -} - -//------------------------------------------------------------------------ -// find -//------------------------------------------------------------------------ - -GBool XPDFCore::find(char *s, GBool caseSensitive, - GBool next, GBool backward, GBool onePageOnly) { - if (!PDFCore::find(s, caseSensitive, next, backward, onePageOnly)) { - XBell(display, 0); - return gFalse; - } -#ifndef NO_TEXT_SELECT - copySelection(); -#endif - return gTrue; -} - -GBool XPDFCore::findU(Unicode *u, int len, GBool caseSensitive, - GBool next, GBool backward, GBool onePageOnly) { - if (!PDFCore::findU(u, len, caseSensitive, next, backward, onePageOnly)) { - XBell(display, 0); - return gFalse; - } -#ifndef NO_TEXT_SELECT - copySelection(); -#endif - return gTrue; -} - -//------------------------------------------------------------------------ -// misc access -//------------------------------------------------------------------------ - -void XPDFCore::setBusyCursor(GBool busy) { - setCursor(busy ? busyCursor : None); -} - -void XPDFCore::takeFocus() { - XmProcessTraversal(drawArea, XmTRAVERSE_CURRENT); -} - -//------------------------------------------------------------------------ -// GUI code -//------------------------------------------------------------------------ - -void XPDFCore::setupX(GBool installCmap, int rgbCubeSizeA) { - XVisualInfo visualTempl; - XVisualInfo *visualList; - Gulong mask; - int nVisuals; - XColor xcolor; - XColor *xcolors; - int r, g, b, n, m; - GBool ok; - - // for some reason, querying XmNvisual doesn't work (even if done - // after the window is mapped) - visual = DefaultVisual(display, screenNum); - XtVaGetValues(shell, XmNcolormap, &colormap, NULL); - - // check for TrueColor visual - //~ this should scan the list, not just look at the first one - visualTempl.visualid = XVisualIDFromVisual(visual); - visualList = XGetVisualInfo(display, VisualIDMask, - &visualTempl, &nVisuals); - if (nVisuals < 1) { - // this shouldn't happen - XFree((XPointer)visualList); - visualList = XGetVisualInfo(display, VisualNoMask, &visualTempl, - &nVisuals); - } - depth = visualList->depth; - if (visualList->c_class == TrueColor) { - trueColor = gTrue; - for (mask = visualList->red_mask, rShift = 0; - mask && !(mask & 1); - mask >>= 1, ++rShift) ; - for (rDiv = 8; mask; mask >>= 1, --rDiv) ; - for (mask = visualList->green_mask, gShift = 0; - mask && !(mask & 1); - mask >>= 1, ++gShift) ; - for (gDiv = 8; mask; mask >>= 1, --gDiv) ; - for (mask = visualList->blue_mask, bShift = 0; - mask && !(mask & 1); - mask >>= 1, ++bShift) ; - for (bDiv = 8; mask; mask >>= 1, --bDiv) ; - } else { - trueColor = gFalse; - } - XFree((XPointer)visualList); - - // allocate a color cube - if (!trueColor) { - - // set colors in private colormap - if (installCmap) { - for (rgbCubeSize = xMaxRGBCube; rgbCubeSize >= 2; --rgbCubeSize) { - m = rgbCubeSize * rgbCubeSize * rgbCubeSize; - if (XAllocColorCells(display, colormap, False, NULL, 0, colors, m)) { - break; - } - } - if (rgbCubeSize >= 2) { - m = rgbCubeSize * rgbCubeSize * rgbCubeSize; - xcolors = (XColor *)gmallocn(m, sizeof(XColor)); - n = 0; - for (r = 0; r < rgbCubeSize; ++r) { - for (g = 0; g < rgbCubeSize; ++g) { - for (b = 0; b < rgbCubeSize; ++b) { - xcolors[n].pixel = colors[n]; - xcolors[n].red = (r * 65535) / (rgbCubeSize - 1); - xcolors[n].green = (g * 65535) / (rgbCubeSize - 1); - xcolors[n].blue = (b * 65535) / (rgbCubeSize - 1); - xcolors[n].flags = DoRed | DoGreen | DoBlue; - ++n; - } - } - } - XStoreColors(display, colormap, xcolors, m); - gfree(xcolors); - } else { - rgbCubeSize = 1; - colors[0] = BlackPixel(display, screenNum); - colors[1] = WhitePixel(display, screenNum); - } - - // allocate colors in shared colormap - } else { - if (rgbCubeSize > xMaxRGBCube) { - rgbCubeSize = xMaxRGBCube; - } - ok = gFalse; - for (rgbCubeSize = rgbCubeSizeA; rgbCubeSize >= 2; --rgbCubeSize) { - ok = gTrue; - n = 0; - for (r = 0; r < rgbCubeSize && ok; ++r) { - for (g = 0; g < rgbCubeSize && ok; ++g) { - for (b = 0; b < rgbCubeSize && ok; ++b) { - if (n == 0) { - colors[n] = BlackPixel(display, screenNum); - ++n; - } else { - xcolor.red = (r * 65535) / (rgbCubeSize - 1); - xcolor.green = (g * 65535) / (rgbCubeSize - 1); - xcolor.blue = (b * 65535) / (rgbCubeSize - 1); - if (XAllocColor(display, colormap, &xcolor)) { - colors[n++] = xcolor.pixel; - } else { - ok = gFalse; - } - } - } - } - } - if (ok) { - break; - } - XFreeColors(display, colormap, &colors[1], n-1, 0); - } - if (!ok) { - rgbCubeSize = 1; - colors[0] = BlackPixel(display, screenNum); - colors[1] = WhitePixel(display, screenNum); - } - } - } -} - -void XPDFCore::initWindow() { - Arg args[20]; - int n; - - // create the cursors - busyCursor = XCreateFontCursor(display, XC_watch); - linkCursor = XCreateFontCursor(display, XC_hand2); - selectCursor = XCreateFontCursor(display, XC_cross); - currentCursor = 0; - - // create the scrolled window and scrollbars - n = 0; - XtSetArg(args[n], XmNscrollingPolicy, XmAPPLICATION_DEFINED); ++n; - XtSetArg(args[n], XmNvisualPolicy, XmVARIABLE); ++n; - scrolledWin = XmCreateScrolledWindow(parentWidget, "scroll", args, n); - XtManageChild(scrolledWin); - n = 0; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - XtSetArg(args[n], XmNminimum, 0); ++n; - XtSetArg(args[n], XmNmaximum, 1); ++n; - XtSetArg(args[n], XmNsliderSize, 1); ++n; - XtSetArg(args[n], XmNvalue, 0); ++n; - XtSetArg(args[n], XmNincrement, 1); ++n; - XtSetArg(args[n], XmNpageIncrement, 1); ++n; - hScrollBar = XmCreateScrollBar(scrolledWin, "hScrollBar", args, n); - if (!fullScreen) { - XtManageChild(hScrollBar); - } - XtAddCallback(hScrollBar, XmNvalueChangedCallback, - &hScrollChangeCbk, (XtPointer)this); -#ifndef DISABLE_SMOOTH_SCROLL - XtAddCallback(hScrollBar, XmNdragCallback, - &hScrollDragCbk, (XtPointer)this); -#endif - n = 0; - XtSetArg(args[n], XmNorientation, XmVERTICAL); ++n; - XtSetArg(args[n], XmNminimum, 0); ++n; - XtSetArg(args[n], XmNmaximum, 1); ++n; - XtSetArg(args[n], XmNsliderSize, 1); ++n; - XtSetArg(args[n], XmNvalue, 0); ++n; - XtSetArg(args[n], XmNincrement, 1); ++n; - XtSetArg(args[n], XmNpageIncrement, 1); ++n; - vScrollBar = XmCreateScrollBar(scrolledWin, "vScrollBar", args, n); - if (!fullScreen) { - XtManageChild(vScrollBar); - } - XtAddCallback(vScrollBar, XmNvalueChangedCallback, - &vScrollChangeCbk, (XtPointer)this); -#ifndef DISABLE_SMOOTH_SCROLL - XtAddCallback(vScrollBar, XmNdragCallback, - &vScrollDragCbk, (XtPointer)this); -#endif - - // create the drawing area - n = 0; - XtSetArg(args[n], XmNshadowType, XmSHADOW_IN); ++n; - XtSetArg(args[n], XmNmarginWidth, 0); ++n; - XtSetArg(args[n], XmNmarginHeight, 0); ++n; - if (fullScreen) { - XtSetArg(args[n], XmNshadowThickness, 0); ++n; - } - drawAreaFrame = XmCreateFrame(scrolledWin, "drawAreaFrame", args, n); - XtManageChild(drawAreaFrame); - n = 0; - XtSetArg(args[n], XmNresizePolicy, XmRESIZE_ANY); ++n; - XtSetArg(args[n], XmNwidth, 700); ++n; - XtSetArg(args[n], XmNheight, 500); ++n; - drawArea = XmCreateDrawingArea(drawAreaFrame, "drawArea", args, n); - XtManageChild(drawArea); - XtAddCallback(drawArea, XmNresizeCallback, &resizeCbk, (XtPointer)this); - XtAddCallback(drawArea, XmNexposeCallback, &redrawCbk, (XtPointer)this); - XtAddCallback(drawArea, XmNinputCallback, &inputCbk, (XtPointer)this); - resizeCbk(drawArea, this, NULL); - - // set up mouse motion translations - XtOverrideTranslations(drawArea, XtParseTranslationTable( - ":DrawingAreaInput()\n" - ":DrawingAreaInput()\n" - ":DrawingAreaInput()\n" - ":DrawingAreaInput()")); - - // can't create a GC until the window gets mapped - drawAreaGC = NULL; -} - -void XPDFCore::hScrollChangeCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmScrollBarCallbackStruct *data = (XmScrollBarCallbackStruct *)callData; - - core->scrollTo(data->value, core->scrollY); -} - -void XPDFCore::hScrollDragCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmScrollBarCallbackStruct *data = (XmScrollBarCallbackStruct *)callData; - - core->scrollTo(data->value, core->scrollY); -} - -void XPDFCore::vScrollChangeCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmScrollBarCallbackStruct *data = (XmScrollBarCallbackStruct *)callData; - - core->scrollTo(core->scrollX, data->value); -} - -void XPDFCore::vScrollDragCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmScrollBarCallbackStruct *data = (XmScrollBarCallbackStruct *)callData; - - core->scrollTo(core->scrollX, data->value); -} - -void XPDFCore::resizeCbk(Widget widget, XtPointer ptr, XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XEvent event; - Widget top; - Window rootWin; - int x1, y1; - Guint w1, h1, bw1, depth1; - Arg args[2]; - int n; - Dimension w, h; - int sx, sy; - - // find the top-most widget which has an associated window, and look - // for a pending ConfigureNotify in the event queue -- if there is - // one, and it specifies a different width or height, that means - // we're still resizing, and we want to skip the current event - for (top = core->parentWidget; - XtParent(top) && XtWindow(XtParent(top)); - top = XtParent(top)) ; - if (XCheckTypedWindowEvent(core->display, XtWindow(top), - ConfigureNotify, &event)) { - XPutBackEvent(core->display, &event); - XGetGeometry(core->display, event.xconfigure.window, - &rootWin, &x1, &y1, &w1, &h1, &bw1, &depth1); - if ((Guint)event.xconfigure.width != w1 || - (Guint)event.xconfigure.height != h1) { - return; - } - } - - n = 0; - XtSetArg(args[n], XmNwidth, &w); ++n; - XtSetArg(args[n], XmNheight, &h); ++n; - XtGetValues(core->drawArea, args, n); - core->drawAreaWidth = (int)w; - core->drawAreaHeight = (int)h; - if (core->zoom == zoomPage || core->zoom == zoomWidth) { - sx = sy = -1; - } else { - sx = core->scrollX; - sy = core->scrollY; - } - core->update(core->topPage, sx, sy, core->zoom, core->rotate, gTrue, gFalse, - gFalse); -} - -void XPDFCore::redrawCbk(Widget widget, XtPointer ptr, XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmDrawingAreaCallbackStruct *data = (XmDrawingAreaCallbackStruct *)callData; - int x, y, w, h; - - if (data->reason == XmCR_EXPOSE) { - x = data->event->xexpose.x; - y = data->event->xexpose.y; - w = data->event->xexpose.width; - h = data->event->xexpose.height; - } else { - x = 0; - y = 0; - w = core->drawAreaWidth; - h = core->drawAreaHeight; - } - core->redrawWindow(x, y, w, h, gFalse); -} - -void XPDFCore::inputCbk(Widget widget, XtPointer ptr, XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmDrawingAreaCallbackStruct *data = (XmDrawingAreaCallbackStruct *)callData; - LinkAction *action; - int pg, x, y; - double xu, yu; - char *s; - KeySym key; - GBool ok; - - switch (data->event->type) { - case ButtonPress: - if (*core->mouseCbk) { - (*core->mouseCbk)(core->mouseCbkData, data->event); - } - break; - case ButtonRelease: - if (*core->mouseCbk) { - (*core->mouseCbk)(core->mouseCbkData, data->event); - } - break; - case MotionNotify: - if (core->doc && core->doc->getNumPages() > 0) { - ok = core->cvtWindowToDev(data->event->xmotion.x, data->event->xmotion.y, - &pg, &x, &y); - if (core->dragging) { - if (ok) { - core->moveSelection(pg, x, y); - } -#ifdef HIGHLIGHTED_REGIONS - } else if (core->selectedRegion && - (core->regionResizeX || core->regionResizeY)) { - if (ok) { - core->resizeRegion(pg, x, y); - } -#endif - } else if (core->hyperlinksEnabled) { - core->cvtDevToUser(pg, x, y, &xu, &yu); - if (ok && (action = core->findLink(pg, xu, yu))) { - core->setCursor(core->linkCursor); - if (action != core->linkAction) { - core->linkAction = action; - if (core->updateCbk) { - s = ""; - switch (action->getKind()) { - case actionGoTo: - s = "[internal link]"; - break; - case actionGoToR: - s = ((LinkGoToR *)action)->getFileName()->getCString(); - break; - case actionLaunch: - s = ((LinkLaunch *)action)->getFileName()->getCString(); - break; - case actionURI: - s = ((LinkURI *)action)->getURI()->getCString(); - break; - case actionNamed: - s = ((LinkNamed *)action)->getName()->getCString(); - break; - case actionMovie: - s = "[movie]"; - break; - case actionUnknown: - s = "[unknown link]"; - break; - } - (*core->updateCbk)(core->updateCbkData, NULL, -1, -1, s); - } - } - } else { - core->setCursor(None); - if (core->linkAction) { - core->linkAction = NULL; - if (core->updateCbk) { - (*core->updateCbk)(core->updateCbkData, NULL, -1, -1, ""); - } - } - } - } - } - if (core->panning) { - core->scrollTo(core->scrollX - (data->event->xmotion.x - core->panMX), - core->scrollY - (data->event->xmotion.y - core->panMY)); - core->panMX = data->event->xmotion.x; - core->panMY = data->event->xmotion.y; - } - break; - case KeyPress: - if (core->keyPressCbk) { - key = XLookupKeysym(&data->event->xkey, - (data->event->xkey.state & ShiftMask) ? 1 : 0); - (*core->keyPressCbk)(core->keyPressCbkData, - key, data->event->xkey.state, data->event); - } - break; - } -} - -PDFCoreTile *XPDFCore::newTile(int xDestA, int yDestA) { - return new XPDFCoreTile(xDestA, yDestA); -} - -void XPDFCore::updateTileData(PDFCoreTile *tileA, int xSrc, int ySrc, - int width, int height, GBool composited) { - XPDFCoreTile *tile = (XPDFCoreTile *)tileA; - XImage *image; - SplashColorPtr dataPtr, p; - Gulong pixel; - Guchar *ap; - Guchar alpha, alpha1; - int w, h, bw, x, y, r, g, b, gray; - int *errDownR, *errDownG, *errDownB; - int errRightR, errRightG, errRightB; - int errDownRightR, errDownRightG, errDownRightB; - int r0, g0, b0, re, ge, be; - - if (!tile->image) { - w = tile->xMax - tile->xMin; - h = tile->yMax - tile->yMin; - image = XCreateImage(display, visual, depth, ZPixmap, 0, NULL, w, h, 8, 0); - image->data = (char *)gmallocn(h, image->bytes_per_line); - tile->image = image; - } else { - image = (XImage *)tile->image; - } - - //~ optimize for known XImage formats - bw = tile->bitmap->getRowSize(); - dataPtr = tile->bitmap->getDataPtr(); - - if (trueColor) { - for (y = 0; y < height; ++y) { - p = dataPtr + (ySrc + y) * bw + xSrc * 3; - if (!composited && tile->bitmap->getAlphaPtr()) { - ap = tile->bitmap->getAlphaPtr() + - (ySrc + y) * tile->bitmap->getWidth() + xSrc; - } else { - ap = NULL; - } - for (x = 0; x < width; ++x) { - r = splashRGB8R(p); - g = splashRGB8G(p); - b = splashRGB8B(p); - if (ap) { - alpha = *ap++; - alpha1 = 255 - alpha; - r = div255(alpha1 * paperColor[0] + alpha * r); - g = div255(alpha1 * paperColor[1] + alpha * g); - b = div255(alpha1 * paperColor[2] + alpha * b); - } - r >>= rDiv; - g >>= gDiv; - b >>= bDiv; - pixel = ((Gulong)r << rShift) + - ((Gulong)g << gShift) + - ((Gulong)b << bShift); - XPutPixel(image, xSrc + x, ySrc + y, pixel); - p += 3; - } - } - } else if (rgbCubeSize == 1) { - //~ this should really use splashModeMono, with non-clustered dithering - for (y = 0; y < height; ++y) { - p = dataPtr + (ySrc + y) * bw + xSrc * 3; - if (!composited && tile->bitmap->getAlphaPtr()) { - ap = tile->bitmap->getAlphaPtr() + - (ySrc + y) * tile->bitmap->getWidth() + xSrc; - } else { - ap = NULL; - } - for (x = 0; x < width; ++x) { - r = splashRGB8R(p); - g = splashRGB8G(p); - b = splashRGB8B(p); - if (ap) { - alpha = *ap++; - alpha1 = 255 - alpha; - r = div255(alpha1 * paperColor[0] + alpha * r); - g = div255(alpha1 * paperColor[1] + alpha * g); - b = div255(alpha1 * paperColor[2] + alpha * b); - } - gray = (int)(0.299 * r + 0.587 * g + 0.114 * b + 0.5); - if (gray < 128) { - pixel = colors[0]; - } else { - pixel = colors[1]; - } - XPutPixel(image, xSrc + x, ySrc + y, pixel); - p += 3; - } - } - } else { - // do Floyd-Steinberg dithering on the whole bitmap - errDownR = (int *)gmallocn(width + 2, sizeof(int)); - errDownG = (int *)gmallocn(width + 2, sizeof(int)); - errDownB = (int *)gmallocn(width + 2, sizeof(int)); - errRightR = errRightG = errRightB = 0; - errDownRightR = errDownRightG = errDownRightB = 0; - memset(errDownR, 0, (width + 2) * sizeof(int)); - memset(errDownG, 0, (width + 2) * sizeof(int)); - memset(errDownB, 0, (width + 2) * sizeof(int)); - for (y = 0; y < height; ++y) { - p = dataPtr + (ySrc + y) * bw + xSrc * 3; - if (!composited && tile->bitmap->getAlphaPtr()) { - ap = tile->bitmap->getAlphaPtr() + - (ySrc + y) * tile->bitmap->getWidth() + xSrc; - } else { - ap = NULL; - } - for (x = 0; x < width; ++x) { - r = splashRGB8R(p); - g = splashRGB8G(p); - b = splashRGB8B(p); - if (ap) { - alpha = *ap++; - alpha1 = 255 - alpha; - r = div255(alpha1 * paperColor[0] + alpha * r); - g = div255(alpha1 * paperColor[1] + alpha * g); - b = div255(alpha1 * paperColor[2] + alpha * b); - } - r0 = r + errRightR + errDownR[x+1]; - g0 = g + errRightG + errDownG[x+1]; - b0 = b + errRightB + errDownB[x+1]; - if (r0 < 0) { - r = 0; - } else if (r0 >= 255) { - r = rgbCubeSize - 1; - } else { - r = div255(r0 * (rgbCubeSize - 1)); - } - if (g0 < 0) { - g = 0; - } else if (g0 >= 255) { - g = rgbCubeSize - 1; - } else { - g = div255(g0 * (rgbCubeSize - 1)); - } - if (b0 < 0) { - b = 0; - } else if (b0 >= 255) { - b = rgbCubeSize - 1; - } else { - b = div255(b0 * (rgbCubeSize - 1)); - } - re = r0 - ((r << 8) - r) / (rgbCubeSize - 1); - ge = g0 - ((g << 8) - g) / (rgbCubeSize - 1); - be = b0 - ((b << 8) - b) / (rgbCubeSize - 1); - errRightR = (re * 7) >> 4; - errRightG = (ge * 7) >> 4; - errRightB = (be * 7) >> 4; - errDownR[x] += (re * 3) >> 4; - errDownG[x] += (ge * 3) >> 4; - errDownB[x] += (be * 3) >> 4; - errDownR[x+1] = ((re * 5) >> 4) + errDownRightR; - errDownG[x+1] = ((ge * 5) >> 4) + errDownRightG; - errDownB[x+1] = ((be * 5) >> 4) + errDownRightB; - errDownRightR = re >> 4; - errDownRightG = ge >> 4; - errDownRightB = be >> 4; - pixel = colors[(r * rgbCubeSize + g) * rgbCubeSize + b]; - XPutPixel(image, xSrc + x, ySrc + y, pixel); - p += 3; - } - } - gfree(errDownR); - gfree(errDownG); - gfree(errDownB); - } -} - -void XPDFCore::redrawRect(PDFCoreTile *tileA, int xSrc, int ySrc, - int xDest, int yDest, int width, int height, - GBool composited) { - XPDFCoreTile *tile = (XPDFCoreTile *)tileA; - Window drawAreaWin; - XGCValues gcValues; - - // create a GC for the drawing area - drawAreaWin = XtWindow(drawArea); - if (!drawAreaGC) { - gcValues.foreground = mattePixel; - drawAreaGC = XCreateGC(display, drawAreaWin, GCForeground, &gcValues); - } - - // draw the document - if (tile) { - XPutImage(display, drawAreaWin, drawAreaGC, tile->image, - xSrc, ySrc, xDest, yDest, width, height); - - // draw the background - } else { - XFillRectangle(display, drawAreaWin, drawAreaGC, - xDest, yDest, width, height); - } -} - -void XPDFCore::updateScrollbars() { - Arg args[20]; - int n; - int maxPos; - - if (pages->getLength() > 0) { - if (continuousMode) { - maxPos = maxPageW; - } else { - maxPos = ((PDFCorePage *)pages->get(0))->w; - } - } else { - maxPos = 1; - } - if (maxPos < drawAreaWidth) { - maxPos = drawAreaWidth; - } - n = 0; - XtSetArg(args[n], XmNvalue, scrollX); ++n; - XtSetArg(args[n], XmNmaximum, maxPos); ++n; - XtSetArg(args[n], XmNsliderSize, drawAreaWidth); ++n; - XtSetArg(args[n], XmNincrement, 16); ++n; - XtSetArg(args[n], XmNpageIncrement, drawAreaWidth); ++n; - XtSetValues(hScrollBar, args, n); - - if (pages->getLength() > 0) { - if (continuousMode) { - maxPos = totalDocH; - } else { - maxPos = ((PDFCorePage *)pages->get(0))->h; - } - } else { - maxPos = 1; - } - if (maxPos < drawAreaHeight) { - maxPos = drawAreaHeight; - } - n = 0; - XtSetArg(args[n], XmNvalue, scrollY); ++n; - XtSetArg(args[n], XmNmaximum, maxPos); ++n; - XtSetArg(args[n], XmNsliderSize, drawAreaHeight); ++n; - XtSetArg(args[n], XmNincrement, 16); ++n; - XtSetArg(args[n], XmNpageIncrement, drawAreaHeight); ++n; - XtSetValues(vScrollBar, args, n); -} - -void XPDFCore::setCursor(Cursor cursor) { - Window topWin; - - if (cursor == currentCursor) { - return; - } - if (!(topWin = XtWindow(shell))) { - return; - } - if (cursor == None) { - XUndefineCursor(display, topWin); - } else { - XDefineCursor(display, topWin, cursor); - } - XFlush(display); - currentCursor = cursor; -} - -GBool XPDFCore::doQuestionDialog(char *title, GString *msg) { - return doDialog(XmDIALOG_QUESTION, gTrue, title, msg); -} - -void XPDFCore::doInfoDialog(char *title, GString *msg) { - doDialog(XmDIALOG_INFORMATION, gFalse, title, msg); -} - -void XPDFCore::doErrorDialog(char *title, GString *msg) { - doDialog(XmDIALOG_ERROR, gFalse, title, msg); -} - -GBool XPDFCore::doDialog(int type, GBool hasCancel, - char *title, GString *msg) { - Widget dialog, scroll, text; - XtAppContext appContext; - Arg args[20]; - int n; - XmString s1, s2; - XEvent event; - - n = 0; - XtSetArg(args[n], XmNdialogType, type); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - s1 = XmStringCreateLocalized(title); - XtSetArg(args[n], XmNdialogTitle, s1); ++n; - s2 = NULL; // make gcc happy - if (msg->getLength() <= 80) { - s2 = XmStringCreateLocalized(msg->getCString()); - XtSetArg(args[n], XmNmessageString, s2); ++n; - } - dialog = XmCreateMessageDialog(drawArea, "questionDialog", args, n); - XmStringFree(s1); - if (msg->getLength() <= 80) { - XmStringFree(s2); - } else { - n = 0; - XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); ++n; - if (drawAreaWidth > 300) { - XtSetArg(args[n], XmNwidth, drawAreaWidth - 100); ++n; - } - scroll = XmCreateScrolledWindow(dialog, "scroll", args, n); - XtManageChild(scroll); - n = 0; - XtSetArg(args[n], XmNeditable, False); ++n; - XtSetArg(args[n], XmNeditMode, XmMULTI_LINE_EDIT); ++n; - XtSetArg(args[n], XmNvalue, msg->getCString()); ++n; - XtSetArg(args[n], XmNshadowThickness, 0); ++n; - text = XmCreateText(scroll, "text", args, n); - XtManageChild(text); - } - XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON)); - XtAddCallback(dialog, XmNokCallback, - &dialogOkCbk, (XtPointer)this); - if (hasCancel) { - XtAddCallback(dialog, XmNcancelCallback, - &dialogCancelCbk, (XtPointer)this); - } else { - XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_CANCEL_BUTTON)); - } - - XtManageChild(dialog); - - appContext = XtWidgetToApplicationContext(dialog); - dialogDone = 0; - do { - XtAppNextEvent(appContext, &event); - XtDispatchEvent(&event); - } while (!dialogDone); - - XtUnmanageChild(dialog); - XtDestroyWidget(dialog); - - return dialogDone > 0; -} - -void XPDFCore::dialogOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - - core->dialogDone = 1; -} - -void XPDFCore::dialogCancelCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - - core->dialogDone = -1; -} - -//------------------------------------------------------------------------ -// password dialog -//------------------------------------------------------------------------ - -void XPDFCore::initPasswordDialog() { - Widget row, label, okBtn, cancelBtn; - Arg args[20]; - int n; - XmString s; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": Password"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - passwordDialog = XmCreateFormDialog(drawArea, "passwordDialog", args, n); - XmStringFree(s); - - //----- message - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - s = XmStringCreateLocalized("This document requires a password."); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(passwordDialog, "msg", args, n); - XmStringFree(s); - XtManageChild(label); - - //----- label and password entry - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, label); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - row = XmCreateRowColumn(passwordDialog, "row", args, n); - XtManageChild(row); - n = 0; - s = XmStringCreateLocalized("Password: "); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(row, "label", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNcolumns, 16); ++n; - passwordText = XmCreateTextField(row, "text", args, n); - XtManageChild(passwordText); - XtAddCallback(passwordText, XmNmodifyVerifyCallback, - &passwordTextVerifyCbk, this); - - //----- "Ok" and "Cancel" buttons - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - okBtn = XmCreatePushButton(passwordDialog, "Ok", args, n); - XtManageChild(okBtn); - XtAddCallback(okBtn, XmNactivateCallback, - &passwordOkCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - cancelBtn = XmCreatePushButton(passwordDialog, "Cancel", args, n); - XtManageChild(cancelBtn); - XtAddCallback(cancelBtn, XmNactivateCallback, - &passwordCancelCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; - XtSetArg(args[n], XmNcancelButton, cancelBtn); ++n; -#if XmVersion > 1001 - XtSetArg(args[n], XmNinitialFocus, passwordText); ++n; -#endif - XtSetValues(passwordDialog, args, n); -} - -void XPDFCore::passwordTextVerifyCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - XmTextVerifyCallbackStruct *data = - (XmTextVerifyCallbackStruct *)callData; - int i, n; - - i = (int)data->startPos; - n = (int)data->endPos - i; - if (i > core->password->getLength()) { - i = core->password->getLength(); - } - if (i + n > core->password->getLength()) { - n = core->password->getLength() - i; - } - core->password->del(i, n); - core->password->insert(i, data->text->ptr, data->text->length); - - for (i = 0; i < data->text->length; ++i) { - data->text->ptr[i] = '*'; - } - data->doit = True; -} - -void XPDFCore::passwordOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - - core->dialogDone = 1; -} - -void XPDFCore::passwordCancelCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFCore *core = (XPDFCore *)ptr; - - core->dialogDone = -1; -} - -GString *XPDFCore::getPassword() { - XtAppContext appContext; - XEvent event; - - // NB: set before calling XmTextFieldSetString, because - // SetString will trigger a call to passwordTextVerifyCbk, which - // expects to be valid - password = new GString(); - XmTextFieldSetString(passwordText, ""); - XtManageChild(passwordDialog); - - appContext = XtWidgetToApplicationContext(passwordDialog); - dialogDone = 0; - do { - XtAppNextEvent(appContext, &event); - XtDispatchEvent(&event); - } while (!dialogDone); - XtUnmanageChild(passwordDialog); - - if (dialogDone < 0) { - delete password; - return NULL; - } - return password; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFCore.h b/thirdparty/xpdf/3.02/src/xpdf/XPDFCore.h deleted file mode 100644 index bca32e71..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFCore.h +++ /dev/null @@ -1,251 +0,0 @@ -//======================================================================== -// -// XPDFCore.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XPDFCORE_H -#define XPDFCORE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#define Object XtObject -#include -#undef Object -#include "gtypes.h" -#include "gfile.h" // for time_t -#include "SplashTypes.h" -#include "PDFCore.h" - -class GString; -class BaseStream; -class PDFDoc; -class LinkAction; - -//------------------------------------------------------------------------ - -#define xMaxRGBCube 6 // max size of RGB color cube - -//------------------------------------------------------------------------ -// callbacks -//------------------------------------------------------------------------ - -typedef void (*XPDFUpdateCbk)(void *data, GString *fileName, - int pageNum, int numPages, char *linkLabel); - -typedef void (*XPDFActionCbk)(void *data, char *action); - -typedef void (*XPDFKeyPressCbk)(void *data, KeySym key, Guint modifiers, - XEvent *event); - -typedef void (*XPDFMouseCbk)(void *data, XEvent *event); - -//------------------------------------------------------------------------ -// XPDFCore -//------------------------------------------------------------------------ - -class XPDFCore: public PDFCore { -public: - - // Create viewer core inside . - XPDFCore(Widget shellA, Widget parentWidgetA, - SplashColorPtr paperColorA, Gulong paperPixelA, - Gulong mattePixelA, GBool fullScreenA, GBool reverseVideoA, - GBool installCmap, int rgbCubeSizeA); - - ~XPDFCore(); - - //----- loadFile / displayPage / displayDest - - // Load a new file. Returns pdfOk or error code. - virtual int loadFile(GString *fileName, GString *ownerPassword = NULL, - GString *userPassword = NULL); - - // Load a new file, via a Stream instead of a file name. Returns - // pdfOk or error code. - virtual int loadFile(BaseStream *stream, GString *ownerPassword = NULL, - GString *userPassword = NULL); - - // Load an already-created PDFDoc object. - virtual void loadDoc(PDFDoc *docA); - - // Resize the window to fit page of the current document. - void resizeToPage(int pg); - - // Update the display, given the specified parameters. - virtual void update(int topPageA, int scrollXA, int scrollYA, - double zoomA, int rotateA, GBool force, - GBool addToHist, GBool adjustScrollX); - - //----- page/position changes - - virtual GBool gotoNextPage(int inc, GBool top); - virtual GBool gotoPrevPage(int dec, GBool top, GBool bottom); - virtual GBool goForward(); - virtual GBool goBackward(); - void startPan(int wx, int wy); - void endPan(int wx, int wy); - - //----- selection - - void startSelection(int wx, int wy); - void endSelection(int wx, int wy); - void copySelection(); - - //----- hyperlinks - - void doAction(LinkAction *action); - LinkAction *getLinkAction() { return linkAction; } - GString *mungeURL(GString *url); - - //----- find - - virtual GBool find(char *s, GBool caseSensitive, - GBool next, GBool backward, GBool onePageOnly); - virtual GBool findU(Unicode *u, int len, GBool caseSensitive, - GBool next, GBool backward, GBool onePageOnly); - - //----- simple modal dialogs - - GBool doQuestionDialog(char *title, GString *msg); - void doInfoDialog(char *title, GString *msg); - void doErrorDialog(char *title, GString *msg); - - //----- password dialog - - virtual GString *getPassword(); - - //----- misc access - - Widget getWidget() { return scrolledWin; } - Widget getDrawAreaWidget() { return drawArea; } - virtual void setBusyCursor(GBool busy); - Cursor getBusyCursor() { return busyCursor; } - void takeFocus(); - void enableHyperlinks(GBool on) { hyperlinksEnabled = on; } - GBool getHyperlinksEnabled() { return hyperlinksEnabled; } - void enableSelect(GBool on) { selectEnabled = on; } - void setUpdateCbk(XPDFUpdateCbk cbk, void *data) - { updateCbk = cbk; updateCbkData = data; } - void setActionCbk(XPDFActionCbk cbk, void *data) - { actionCbk = cbk; actionCbkData = data; } - void setKeyPressCbk(XPDFKeyPressCbk cbk, void *data) - { keyPressCbk = cbk; keyPressCbkData = data; } - void setMouseCbk(XPDFMouseCbk cbk, void *data) - { mouseCbk = cbk; mouseCbkData = data; } - GBool getFullScreen() { return fullScreen; } - -private: - - virtual GBool checkForNewFile(); - - //----- hyperlinks - void runCommand(GString *cmdFmt, GString *arg); - - //----- selection - static Boolean convertSelectionCbk(Widget widget, Atom *selection, - Atom *target, Atom *type, - XtPointer *value, unsigned long *length, - int *format); - - //----- GUI code - void setupX(GBool installCmap, int rgbCubeSizeA); - void initWindow(); - static void hScrollChangeCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void hScrollDragCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void vScrollChangeCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void vScrollDragCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void resizeCbk(Widget widget, XtPointer ptr, XtPointer callData); - static void redrawCbk(Widget widget, XtPointer ptr, XtPointer callData); - static void inputCbk(Widget widget, XtPointer ptr, XtPointer callData); - virtual PDFCoreTile *newTile(int xDestA, int yDestA); - virtual void updateTileData(PDFCoreTile *tileA, int xSrc, int ySrc, - int width, int height, GBool composited); - virtual void redrawRect(PDFCoreTile *tileA, int xSrc, int ySrc, - int xDest, int yDest, int width, int height, - GBool composited); - virtual void updateScrollbars(); - void setCursor(Cursor cursor); - GBool doDialog(int type, GBool hasCancel, - char *title, GString *msg); - static void dialogOkCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void dialogCancelCbk(Widget widget, XtPointer ptr, - XtPointer callData); - void initPasswordDialog(); - static void passwordTextVerifyCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void passwordOkCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void passwordCancelCbk(Widget widget, XtPointer ptr, - XtPointer callData); - - Gulong paperPixel; - Gulong mattePixel; - //~unimp: move fullScreen into PDFCore? - GBool fullScreen; - - Display *display; - int screenNum; - Visual *visual; - Colormap colormap; - Guint depth; // visual depth - GBool trueColor; // set if using a TrueColor visual - int rDiv, gDiv, bDiv; // RGB right shifts (for TrueColor) - int rShift, gShift, bShift; // RGB left shifts (for TrueColor) - int rgbCubeSize; // size of color cube (for non-TrueColor) - Gulong // color cube (for non-TrueColor) - colors[xMaxRGBCube * xMaxRGBCube * xMaxRGBCube]; - - Widget shell; // top-level shell containing the widget - Widget parentWidget; // parent widget (not created by XPDFCore) - Widget scrolledWin; - Widget hScrollBar; - Widget vScrollBar; - Widget drawAreaFrame; - Widget drawArea; - Cursor busyCursor, linkCursor, selectCursor; - Cursor currentCursor; - GC drawAreaGC; // GC for blitting into drawArea - - static GString *currentSelection; // selected text - static XPDFCore *currentSelectionOwner; - static Atom targetsAtom; - - GBool panning; - int panMX, panMY; - - time_t modTime; // last modification time of PDF file - - LinkAction *linkAction; // mouse cursor is over this link - - XPDFUpdateCbk updateCbk; - void *updateCbkData; - XPDFActionCbk actionCbk; - void *actionCbkData; - XPDFKeyPressCbk keyPressCbk; - void *keyPressCbkData; - XPDFMouseCbk mouseCbk; - void *mouseCbkData; - - GBool hyperlinksEnabled; - GBool selectEnabled; - - int dialogDone; - - Widget passwordDialog; - Widget passwordText; - GString *password; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFTree.cc b/thirdparty/xpdf/3.02/src/xpdf/XPDFTree.cc deleted file mode 100644 index bae9cb00..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFTree.cc +++ /dev/null @@ -1,951 +0,0 @@ -//======================================================================== -// -// XPDFTree.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include "gmem.h" -#include "XPDFTreeP.h" - -//------------------------------------------------------------------------ - -#define xpdfTreeIndent 16 - -//------------------------------------------------------------------------ - -struct _XPDFTreeEntry { - Widget widget; - XPDFTreeEntry *children; - XPDFTreeEntry *next; -}; - -//------------------------------------------------------------------------ - -static void classPartInitialize(WidgetClass widgetClass); -static void initialize(Widget requestWidget, Widget newWidget, - ArgList args, Cardinal *numArgs); -static void destroy(Widget widget); -static void destroySubtree(XPDFTreeEntry *e); -static void resize(Widget widget); -static void redisplay(Widget widget, XEvent *event, Region region); -static void redisplaySubtree(XPDFTreeWidget w, XPDFTreeEntry *e, - XEvent *event, Region region); -static void drawExpandedIcon(XPDFTreeWidget w, Position x, Position y); -static void drawCollapsedIcon(XPDFTreeWidget w, Position x, Position y); -static Boolean setValues(Widget oldWidget, Widget requestWidget, - Widget newWidget, ArgList args, Cardinal *numArgs); -static void setValuesAlmost(Widget oldWidget, Widget newWidget, - XtWidgetGeometry *request, - XtWidgetGeometry *reply); -static XtGeometryResult queryGeometry(Widget widget, - XtWidgetGeometry *request, - XtWidgetGeometry *reply); -static XtGeometryResult geometryManager(Widget widget, - XtWidgetGeometry *request, - XtWidgetGeometry *reply); -static void changeManaged(Widget widget); -static void initConstraint(Widget requestWidget, Widget newWidget, - ArgList args, Cardinal *numArgs); -static void destroyConstraint(Widget widget); -static void deleteSubtree(Widget widget); -static Boolean constraintSetValues(Widget oldWidget, Widget requestWidget, - Widget newWidget, - ArgList args, Cardinal *numArgs); -static void insertChildOnList(XPDFTreeEntry *e, XPDFTreeEntry **listHead); -static void deleteChildFromList(XPDFTreeEntry *e, XPDFTreeEntry **listHead); -static void createGC(Widget widget); -static void destroyGC(Widget widget); -static void layout(Widget widget, Widget instigator); -static int layoutSubtree(XPDFTreeWidget w, Widget instigator, - XPDFTreeEntry *e, Position x, Position y, - Boolean visible); -static void calcSize(Widget widget, Widget instigator, - Dimension *totalWidth, - Dimension *totalHeight); -static void calcSubtreeSize(XPDFTreeWidget w, Widget instigator, - XPDFTreeEntry *e, - Dimension *width, Dimension *height); -static Boolean needRelayout(Widget oldWidget, Widget newWidget); -static void click(Widget widget, XEvent *event, - String *params, Cardinal *numParams); -static Boolean findPosition(XPDFTreeWidget w, int x, int y, - XPDFTreeEntry **e, Boolean *onExpandIcon); -static Boolean findPositionInSubtree(XPDFTreeWidget w, int x, int y, - XPDFTreeEntry **e, - Boolean *onExpandIcon); - -//------------------------------------------------------------------------ - -static XtResource resources[] = { - { XmNmarginWidth, XmCMarginWidth, XmRHorizontalDimension, - sizeof(Dimension), XtOffsetOf(XPDFTreeRec, tree.marginWidth), - XmRImmediate, (XtPointer)0 }, - { XmNmarginHeight, XmCMarginHeight, XmRVerticalDimension, - sizeof(Dimension), XtOffsetOf(XPDFTreeRec, tree.marginHeight), - XmRImmediate, (XtPointer)0 }, - { XPDFNselectionCallback, XmCCallback, XmRCallback, - sizeof(XtCallbackList), XtOffsetOf(XPDFTreeRec, tree.selectCallback), - XmRImmediate, (XtPointer)NULL } -}; - -static XmSyntheticResource synResources[] = { - { XmNmarginWidth, sizeof(Dimension), - XtOffsetOf(XPDFTreeRec, tree.marginWidth), -#if XmVERSION > 1 - XmeFromHorizontalPixels, XmeToHorizontalPixels -#else - _XmFromHorizontalPixels, _XmToHorizontalPixels -#endif - }, - { XmNmarginHeight, sizeof(Dimension), - XtOffsetOf(XPDFTreeRec, tree.marginHeight), -#if XmVERSION > 1 - XmeFromVerticalPixels, XmeToVerticalPixels -#else - _XmFromVerticalPixels, _XmToVerticalPixels -#endif - } -}; - -static XtResource constraints[] = { - { XPDFNentryParent, XPDFCentryParent, XmRWidget, - sizeof(Widget), XtOffsetOf(XPDFTreeConstraintRec, tree.entryParent), - XmRImmediate, (XtPointer)NULL }, - { XPDFNentryExpanded, XPDFCentryExpanded, XmRBoolean, - sizeof(Boolean), XtOffsetOf(XPDFTreeConstraintRec, tree.entryExpanded), - XmRImmediate, (XtPointer)False }, - { XPDFNentryPosition, XPDFCentryPosition, XmRInt, - sizeof(int), XtOffsetOf(XPDFTreeConstraintRec, tree.entryPosition), - XmRImmediate, (XtPointer)0 } -}; - -static char defaultTranslations[] = - ": XPDFTreeClick()"; - -static XtActionsRec actions[] = { - { "XPDFTreeClick", click } -}; - -externaldef(xpdftreeclassrec) XPDFTreeClassRec xpdfTreeClassRec = { - { // Core - (WidgetClass)&xmManagerClassRec, // superclass - "XPDFTree", // class_name - sizeof(XPDFTreeRec), // widget_size - NULL, // class_initialize - &classPartInitialize, // class_part_initialize - FALSE, // class_inited - &initialize, // initialize - NULL, // initialize_hook - XtInheritRealize, // realize - actions, // actions - XtNumber(actions), // num_actions - resources, // resources - XtNumber(resources), // num_resources - NULLQUARK, // xrm_class - TRUE, // compress_motion - XtExposeCompressMaximal, // compress_exposure - TRUE, // compress_enterleave - FALSE, // visible_interest - &destroy, // destroy - &resize, // resize - &redisplay, // expose - &setValues, // set_values - NULL, // set_values_hook - &setValuesAlmost, // set_values_almost - NULL, // get_values_hook - NULL, // accept_focus - XtVersion, // version - NULL, // callback_private - defaultTranslations, // tm_table - &queryGeometry, // query_geometry - NULL, // display_accelerator - NULL // extension - }, - { // Composite - &geometryManager, // geometry_manager - &changeManaged, // change_managed - XtInheritInsertChild, // insert_child - XtInheritDeleteChild, // delete_child - NULL // extension - }, - { // Constraint - constraints, // constraint_resources - XtNumber(constraints), // constraint_num_resources - sizeof(XPDFTreeConstraintRec), // constraint_size - &initConstraint, // constraint_initialize - &destroyConstraint, // constraint_destroy - &constraintSetValues, // constraint_set_values - NULL // extension - }, - { // XmManager - XtInheritTranslations, // translations -#if XmVERSION > 1 - synResources, // syn_resources - XtNumber(synResources), // num_syn_resources -#else - NULL, // syn_resources - 0, // num_syn_resources -#endif - NULL, // syn_constraint_resources - 0, // num_syn_constraint_res's - XmInheritParentProcess, // parent_process - NULL // extension - }, - { // XPDFTree - &createGC, // createGC - &destroyGC, // destroyGC - &layout, // layout - &calcSize, // calcSize - &needRelayout, // needRelayout - NULL // extension - } -}; - -externaldef(xpdftreewidgetclass) WidgetClass xpdfTreeWidgetClass = - (WidgetClass)&xpdfTreeClassRec; - -//------------------------------------------------------------------------ - -static void classPartInitialize(WidgetClass widgetCls) { - XPDFTreeWidgetClass wc = (XPDFTreeWidgetClass)widgetCls; - XPDFTreeWidgetClass sc = (XPDFTreeWidgetClass)wc->coreClass.superclass; - - // method inheritance - if (wc->treeClass.createGC == XPDFInheritCreateGC) { - wc->treeClass.createGC = sc->treeClass.createGC; - } - if (wc->treeClass.destroyGC == XPDFInheritDestroyGC) { - wc->treeClass.destroyGC = sc->treeClass.destroyGC; - } - if (wc->treeClass.layout == XPDFInheritLayout) { - wc->treeClass.layout = sc->treeClass.layout; - } - if (wc->treeClass.calcSize == XPDFInheritCalcSize) { - wc->treeClass.calcSize = sc->treeClass.calcSize; - } - if (wc->treeClass.needRelayout == XPDFInheritNeedRelayout) { - wc->treeClass.needRelayout = sc->treeClass.needRelayout; - } -} - -static void initialize(Widget requestWidget, Widget newWidget, - ArgList args, Cardinal *numArgs) { - XPDFTreeWidget nw = (XPDFTreeWidget)newWidget; - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(newWidget); - - nw->tree.root = NULL; - nw->tree.redrawY = -1; - if (cls->treeClass.createGC) { - (*cls->treeClass.createGC)(newWidget); - } else { - createGC(newWidget); - } -} - -static void destroy(Widget widget) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget); - - if (w->tree.root) { - destroySubtree(w->tree.root); - w->tree.root = NULL; - } - if (cls->treeClass.destroyGC) { - (*cls->treeClass.destroyGC)(widget); - } else { - destroyGC(widget); - } -} - -static void destroySubtree(XPDFTreeEntry *e) { - if (e->children) { - destroySubtree(e->children); - } - if (e->next) { - destroySubtree(e->next); - } -} - -static void resize(Widget widget) { - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget); - - if (cls->treeClass.layout) { - (*cls->treeClass.layout)(widget, NULL); - } else { - layout(widget, NULL); - } -} - -static void redisplay(Widget widget, XEvent *event, Region region) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - XPDFTreeEntry *e; - - if (w->tree.redrawY >= 0) { - XClearArea(XtDisplay((Widget)w), XtWindow((Widget)w), - 0, w->tree.redrawY, w->core.width, w->core.height, False); - w->tree.redrawY = -1; - } - for (e = w->tree.root; e; e = e->next) { - redisplaySubtree(w, e, event, region); - } -} - -static void redisplaySubtree(XPDFTreeWidget w, XPDFTreeEntry *e, - XEvent *event, Region region) { - XPDFTreeConstraint c; - Position x, y, y2; - XPDFTreeEntry *child; - - (*XtClass(e->widget)->core_class.expose)(e->widget, event, region); - c = XPDFTreeCPart(e->widget); - x = e->widget->core.x; - y = e->widget->core.y + e->widget->core.height / 2; - if (e->children) { - if (c->entryExpanded) { - drawExpandedIcon(w, x - 8, y); - y2 = y; // make gcc happy - for (child = e->children; child; child = child->next) { - y2 = child->widget->core.y + child->widget->core.height / 2; - XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.dottedGC, - x - 8, y2, x + 6, y2); - redisplaySubtree(w, child, event, region); - } - XDrawLine(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.dottedGC, - x - 8, y + 2, x - 8, y2); - } else { - drawCollapsedIcon(w, x - 8, y); - } - } -} - -static void drawExpandedIcon(XPDFTreeWidget w, Position x, Position y) { - XPoint pts[4]; - - pts[0].x = x - 4; pts[0].y = y - 2; - pts[1].x = x + 4; pts[1].y = y - 2; - pts[2].x = x; pts[2].y = y + 2; - pts[3].x = x - 4; pts[3].y = y - 2; - XDrawLines(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.plainGC, - pts, 4, CoordModeOrigin); -} - -static void drawCollapsedIcon(XPDFTreeWidget w, Position x, Position y) { - XPoint pts[4]; - - pts[0].x = x - 2; pts[0].y = y - 4; - pts[1].x = x - 2; pts[1].y = y + 4; - pts[2].x = x + 2; pts[2].y = y; - pts[3].x = x - 2; pts[3].y = y - 4; - XDrawLines(XtDisplay((Widget)w), XtWindow((Widget)w), w->tree.plainGC, - pts, 4, CoordModeOrigin); -} - -static Boolean setValues(Widget oldWidget, Widget requestWidget, - Widget newWidget, ArgList args, Cardinal *numArgs) { - XPDFTreeWidget ow = (XPDFTreeWidget)oldWidget; - XPDFTreeWidget nw = (XPDFTreeWidget)newWidget; - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(nw); - Boolean relayout, redisp; - - // check to see if layout-affecting resources have changed - if (cls->treeClass.needRelayout) { - relayout = (*cls->treeClass.needRelayout)((Widget)ow, (Widget)nw); - } else { - relayout = needRelayout((Widget)ow, (Widget)nw); - } - redisp = False; - if (relayout) { - - // calculate a new ideal size (reset the widget size first so - // calcSize will compute a new one) - if (nw->core.width == ow->core.width) { - nw->core.width = 0; - } - if (nw->core.height == ow->core.height) { - nw->core.height = 0; - } - if (cls->treeClass.calcSize) { - (*cls->treeClass.calcSize)((Widget)nw, NULL, - &nw->core.width, &nw->core.height); - } else { - calcSize((Widget)nw, NULL, &nw->core.width, &nw->core.height); - } - - // if resources have changed but size hasn't, layout manually - // (because Xt just looks at the size) - if (nw->core.width == ow->core.width && - nw->core.height == ow->core.height) { - if (cls->treeClass.layout) { - (*cls->treeClass.layout)((Widget)nw, NULL); - } else { - layout((Widget)nw, NULL); - } - redisp = True; - } - } - - return redisp; -} - -static void setValuesAlmost(Widget oldWidget, Widget newWidget, - XtWidgetGeometry *request, - XtWidgetGeometry *reply) { - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(newWidget); - - // our parent rejected a geometry request, so accept the compromise - // and relayout - if (!reply->request_mode) { - if (cls->treeClass.layout) { - (*cls->treeClass.layout)(newWidget, NULL); - } else { - layout(newWidget, NULL); - } - } - *request = *reply; -} - -static XtGeometryResult queryGeometry(Widget widget, - XtWidgetGeometry *request, - XtWidgetGeometry *reply) { - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget); - - if (!XtIsRealized(widget)) { - reply->width = XtWidth(widget); - reply->height = XtHeight(widget); - } else { - reply->width = 0; - reply->height = 0; - } - if (cls->treeClass.calcSize) { - (*cls->treeClass.calcSize)(widget, NULL, &reply->width, &reply->height); - } else { - calcSize(widget, NULL, &reply->width, &reply->height); - } -#if XmVERSION > 1 - return XmeReplyToQueryGeometry(widget, request, reply); -#else - if ((request->request_mode & CWWidth) && - (request->request_mode & CWHeight) && - request->width == reply->width && - request->height == reply->height) { - return XtGeometryYes; - } - if (reply->width == XtWidth(widget) && - reply->height == XtHeight(widget)) { - return XtGeometryNo; - } - reply->request_mode = CWWidth | CWHeight; - return XtGeometryAlmost; -#endif -} - -static XtGeometryResult geometryManager(Widget widget, - XtWidgetGeometry *request, - XtWidgetGeometry *reply) { - XPDFTreeWidget w = (XPDFTreeWidget)XtParent(widget); - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(w); - Dimension curWidth, curHeight, curBW; - XtWidgetGeometry parentReq; - XtGeometryResult result; - - // deny any requests for a new position - if ((request->request_mode & CWX) || (request->request_mode & CWY)) { - return XtGeometryNo; - } - - // save the current geometry - curWidth = w->core.width; - curHeight = w->core.height; - curBW = w->core.border_width; - - // make the requested changes - if (request->request_mode & CWWidth) { - w->core.width = request->width; - } - if (request->request_mode & CWHeight) { - w->core.height = request->height; - } - if (request->request_mode & CWBorderWidth) { - w->core.border_width = request->border_width; - } - - // calculate the new ideal size - parentReq.width = 0; - parentReq.height = 0; - if (cls->treeClass.calcSize) { - (*cls->treeClass.calcSize)((Widget)w, widget, - &parentReq.width, &reply->height); - } else { - calcSize((Widget)w, widget, &parentReq.width, &reply->height); - } - - // send geometry request to our parent - parentReq.request_mode = CWWidth | CWHeight; - if (request->request_mode & XtCWQueryOnly) { - parentReq.request_mode |= XtCWQueryOnly; - } - result = XtMakeGeometryRequest((Widget)w, &parentReq, NULL); - if (result == XtGeometryAlmost) { - result = XtGeometryNo; - } - - if (result == XtGeometryNo || (request->request_mode & XtCWQueryOnly)) { - // restore the original geometry - w->core.width = curWidth; - w->core.height = curHeight; - w->core.border_width = curBW; - } else { - if (cls->treeClass.layout) { - (*cls->treeClass.layout)((Widget)w, widget); - } else { - layout((Widget)w, widget); - } - } - - return result; -} - -static void changeManaged(Widget widget) { - Dimension width, height; - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass(widget); - - // compute the ideal size - if (!XtIsRealized(widget)) { - width = XtWidth(widget); - height = XtHeight(widget); - } else { - width = 0; - height = 0; - } - if (cls->treeClass.calcSize) { - (*cls->treeClass.calcSize)(widget, NULL, &width, &height); - } else { - calcSize(widget, NULL, &width, &height); - } - - // make resize request to parent -- keep asking until we get a yes - // or no - while (XtMakeResizeRequest(widget, width, height, &width, &height) - == XtGeometryAlmost) ; - - // relayout - if (cls->treeClass.layout) { - (*cls->treeClass.layout)(widget, NULL); - } else { - layout(widget, NULL); - } - -#if XmVERSION > 1 - // update keyboard traversal - XmeNavigChangeManaged(widget); -#else - _XmNavigChangeManaged(widget); -#endif -} - -static void initConstraint(Widget requestWidget, Widget newWidget, - ArgList args, Cardinal *numArgs) { - XPDFTreeWidget w = (XPDFTreeWidget)XtParent(newWidget); - XPDFTreeConstraint c; - - c = XPDFTreeCPart(newWidget); - c->e = (XPDFTreeEntry *)gmalloc(sizeof(XPDFTreeEntry)); - c->e->widget = newWidget; - c->e->children = NULL; - c->e->next = NULL; - if (c->entryParent) { - insertChildOnList(c->e, &XPDFTreeCPart(c->entryParent)->e->children); - } else { - insertChildOnList(c->e, &w->tree.root); - } -} - -static void destroyConstraint(Widget widget) { - deleteSubtree(widget); -} - -static void deleteSubtree(Widget widget) { - XPDFTreeWidget w = (XPDFTreeWidget)XtParent(widget); - XPDFTreeConstraint c; - - c = XPDFTreeCPart(widget); - if (!c->e) { - return; - } - while (c->e->children) { - deleteSubtree(c->e->children->widget); - } - if (c->entryParent) { - deleteChildFromList(c->e, &XPDFTreeCPart(c->entryParent)->e->children); - } else { - deleteChildFromList(c->e, &w->tree.root); - } - gfree(c->e); - c->e = NULL; -} - -static Boolean constraintSetValues(Widget oldWidget, Widget requestWidget, - Widget newWidget, - ArgList args, Cardinal *numArgs) { - XPDFTreeWidget w = (XPDFTreeWidget)XtParent(newWidget); - XPDFTreeWidgetClass cls = (XPDFTreeWidgetClass)XtClass((Widget)w); - XPDFTreeConstraint oc, nc; - Boolean relayout; - Dimension width, height; - - if (!XtIsManaged(newWidget)) { - return False; - } - oc = XPDFTreeCPart(oldWidget); - nc = XPDFTreeCPart(newWidget); - relayout = False; - if (nc->entryParent != oc->entryParent || - nc->entryPosition != oc->entryPosition) { - if (oc->entryParent) { - deleteChildFromList(oc->e, &XPDFTreeCPart(oc->entryParent)->e->children); - } else { - deleteChildFromList(oc->e, &w->tree.root); - } - if (nc->entryParent) { - insertChildOnList(nc->e, &XPDFTreeCPart(nc->entryParent)->e->children); - } else { - insertChildOnList(nc->e, &w->tree.root); - } - relayout = True; - } else if (nc->entryExpanded != oc->entryExpanded) { - relayout = True; - } - - if (relayout) { - - // calculate a new ideal size (reset the widget size first so - // calcSize will compute a new one) - width = 0; - height = 0; - if (cls->treeClass.calcSize) { - (*cls->treeClass.calcSize)((Widget)w, NULL, &width, &height); - } else { - calcSize((Widget)w, NULL, &width, &height); - } - - // make resize request to parent -- keep asking until we get a yes - // or no - while (XtMakeResizeRequest((Widget)w, width, height, &width, &height) - == XtGeometryAlmost) ; - - // relayout the widget - if (cls->treeClass.layout) { - (*cls->treeClass.layout)((Widget)w, NULL); - } else { - layout((Widget)w, NULL); - } - } - - return relayout; -} - -static void insertChildOnList(XPDFTreeEntry *e, XPDFTreeEntry **listHead) { - int pos; - XPDFTreeEntry *e2; - - pos = XPDFTreeCPart(e->widget)->entryPosition; - if (!*listHead || pos < XPDFTreeCPart((*listHead)->widget)->entryPosition) { - e->next = *listHead; - *listHead = e; - } else { - for (e2 = *listHead; - e2->next && pos >= XPDFTreeCPart(e2->next->widget)->entryPosition; - e2 = e2->next) ; - e->next = e2->next; - e2->next = e; - } -} - -static void deleteChildFromList(XPDFTreeEntry *e, XPDFTreeEntry **listHead) { - XPDFTreeEntry **p; - - for (p = listHead; *p; p = &(*p)->next) { - if (*p == e) { - *p = e->next; - e->next = NULL; - return; - } - } -} - -static void createGC(Widget widget) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - XGCValues gcValues; - - gcValues.foreground = w->manager.foreground; - gcValues.line_width = 0; - gcValues.line_style = LineSolid; - w->tree.plainGC = XtGetGC(widget, - GCForeground | GCLineWidth | GCLineStyle, - &gcValues); - - gcValues.line_style = LineOnOffDash; - gcValues.dashes = 1; - gcValues.dash_offset = 0; - w->tree.dottedGC = XtGetGC(widget, - GCForeground | GCLineWidth | GCLineStyle | - GCDashList | GCDashOffset, - &gcValues); -} - -static void destroyGC(Widget widget) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - - XtReleaseGC(widget, w->tree.plainGC); - XtReleaseGC(widget, w->tree.dottedGC); -} - -static void layout(Widget widget, Widget instigator) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - XPDFTreeEntry *e; - Position x, y; - - x = w->tree.marginWidth + xpdfTreeIndent; - y = w->tree.marginHeight; - for (e = w->tree.root; e; e = e->next) { - y = layoutSubtree(w, instigator, e, x, y, True); - } -} - -static int layoutSubtree(XPDFTreeWidget w, Widget instigator, - XPDFTreeEntry *e, Position x, Position y, - Boolean visible) { - Widget ew; - XPDFTreeEntry *child; - XPDFTreeConstraint c; - int dy; - - ew = e->widget; - if (!XtIsManaged(ew)) { - return y; - } - c = XPDFTreeCPart(ew); - - // place this entry - if (ew) { - if (visible) { - if (ew == instigator) { - ew->core.x = x; - ew->core.y = y; - } else { -#if XmVERSION > 1 - XmeConfigureObject(ew, x, y, ew->core.width, ew->core.height, - ew->core.border_width); -#else - _XmConfigureObject(ew, x, y, ew->core.width, ew->core.height, - ew->core.border_width); -#endif - } - dy = ew->core.height + 2 * ew->core.border_width; - // this is a kludge to avoid crashes if the widget becomes too - // tall - if ((int)y + dy > 32767) { - y = 32767; - } else { - y += dy; - } - } - } - - // place this entry's children - x += xpdfTreeIndent; - for (child = e->children; child; child = child->next) { - y = layoutSubtree(w, instigator, child, x, y, - visible && (!c || c->entryExpanded)); - } - - return y; -} - -static void calcSize(Widget widget, Widget instigator, - Dimension *totalWidth, - Dimension *totalHeight) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - XPDFTreeEntry *e; - int h1; - Dimension w1, w2, h2; - - w1 = h1 = 0; - for (e = w->tree.root; e; e = e->next) { - calcSubtreeSize(w, instigator, e, &w2, &h2); - if (w2 > w1) { - w1 = w2; - } - h1 += (int)h2; - } - w1 += xpdfTreeIndent + 2 * w->tree.marginWidth; - h1 += 2 * (int)w->tree.marginHeight; - if (h1 == 0) { - h1 = 1; - } else if (h1 > 32767) { - // this is a kludge to avoid crashes if the widget becomes too - // tall - h1 = 32767; - } - if (!*totalWidth) { - *totalWidth = w1; - } - if (!*totalHeight) { - *totalHeight = (Dimension)h1; - } -} - -static void calcSubtreeSize(XPDFTreeWidget w, Widget instigator, - XPDFTreeEntry *e, - Dimension *width, Dimension *height) { - Widget ew; - XPDFTreeEntry *child; - XPDFTreeConstraint c; - XtWidgetGeometry geom; - int h1; - Dimension w1, w2, h2; - - ew = e->widget; - if (!XtIsManaged(ew)) { - *width = *height = 0; - return; - } - c = XPDFTreeCPart(ew); - - // get size of this entry - if (ew) { - if (!XtIsManaged(ew)) { - *width = *height = 0; - return; - } - if (ew == instigator) { - w1 = ew->core.width; - h1 = (int)ew->core.height; - } else { - XtQueryGeometry(ew, NULL, &geom); - w1 = (geom.request_mode & CWWidth) ? geom.width : ew->core.width; - h1 = (int)((geom.request_mode & CWHeight) ? geom.height - : ew->core.height); - } - h1 += 2 * (int)ew->core.border_width; - } else { - // root of tree - w1 = 0; - h1 = 0; - } - - // if this entry is expanded, get size of all of its children - if (c->entryExpanded) { - for (child = e->children; child; child = child->next) { - calcSubtreeSize(w, instigator, child, &w2, &h2); - w2 += xpdfTreeIndent; - if (w2 > w1) { - w1 = w2; - } - h1 += (int)h2; - } - } - - // this is a kludge to avoid crashes if the widget becomes too tall - if (h1 > 32767) { - h1 = 32767; - } - *width = w1; - *height = h1; -} - -static Boolean needRelayout(Widget oldWidget, Widget newWidget) { - XPDFTreeWidget ow = (XPDFTreeWidget)oldWidget; - XPDFTreeWidget nw = (XPDFTreeWidget)newWidget; - - if (nw->tree.marginWidth != ow->tree.marginWidth || - nw->tree.marginHeight != ow->tree.marginHeight) { - return True; - } - return False; -} - -static void click(Widget widget, XEvent *event, - String *params, Cardinal *numParams) { - XPDFTreeWidget w = (XPDFTreeWidget)widget; - XButtonPressedEvent *bpe; - XPDFTreeEntry *e; - Boolean onExpandIcon; - XPDFTreeConstraint c; - XPDFTreeSelectCallbackStruct cbs; - - if (event->type != ButtonPress) { - return; - } - bpe = (XButtonPressedEvent *)event; - if (findPosition(w, bpe->x, bpe->y, &e, &onExpandIcon)) { - if (onExpandIcon) { - c = XPDFTreeCPart(e->widget); - w->tree.redrawY = e->widget->core.y; - XtVaSetValues(e->widget, XPDFNentryExpanded, !c->entryExpanded, NULL); - } else { - XmProcessTraversal(e->widget, XmTRAVERSE_CURRENT); - XtCallActionProc(widget, "ManagerGadgetActivate", event, NULL, 0); - cbs.reason = XmCR_ACTIVATE; - cbs.event = event; - cbs.selectedItem = e->widget; - XtCallCallbackList(widget, w->tree.selectCallback, &cbs); - } - } -} - -static Boolean findPosition(XPDFTreeWidget w, int x, int y, - XPDFTreeEntry **e, Boolean *onExpandIcon) { - XPDFTreeEntry *e2; - - for (e2 = w->tree.root; e2; e2 = e2->next) { - *e = e2; - if (findPositionInSubtree(w, x, y, e, onExpandIcon)) { - return True; - } - } - return False; -} - -// If (x,y) falls on either an expand/collapse icon or a label gadget, -// set * and * and return true. -static Boolean findPositionInSubtree(XPDFTreeWidget w, int x, int y, - XPDFTreeEntry **e, - Boolean *onExpandIcon) { - Widget child; - XPDFTreeConstraint c; - XPDFTreeEntry *e2; - int y1; - - child = (*e)->widget; - y1 = child->core.y + child->core.height / 2; - if (x >= child->core.x && x < child->core.x + child->core.width && - y >= child->core.y && y < child->core.y + child->core.height) { - *onExpandIcon = False; - return True; - } else if (x >= child->core.x - 16 && x < child->core.x - 4 && - y >= y1 - 6 && y < y1 + 6 && - (*e)->children) { - *onExpandIcon = True; - return True; - } - c = XPDFTreeCPart(child); - if (!c || c->entryExpanded) { - for (e2 = (*e)->children; e2; e2 = e2->next) { - *e = e2; - if (findPositionInSubtree(w, x, y, e, onExpandIcon)) { - return True; - } - } - } - return False; -} - -Widget XPDFCreateTree(Widget parent, char *name, - ArgList argList, Cardinal numArgs) { - return XtCreateWidget(name, xpdfTreeWidgetClass, parent, argList, numArgs); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFTree.h b/thirdparty/xpdf/3.02/src/xpdf/XPDFTree.h deleted file mode 100644 index be7293a3..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFTree.h +++ /dev/null @@ -1,46 +0,0 @@ -//======================================================================== -// -// XPDFTree.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XPDFTREE_H -#define XPDFTREE_H - -#include -#include - -extern "C" { - -externalref WidgetClass xpdfTreeWidgetClass; - -typedef struct _XPDFTreeClassRec *XPDFTreeWidgetClass; -typedef struct _XPDFTreeRec *XPDFTreeWidget; - -#ifndef XPDFIsTree -#define XPDFIsTree(w) XtIsSubclass(w, xpdfTreeWidgetClass) -#endif - -#define XPDFNentryParent "entryParent" -#define XPDFNentryExpanded "entryExpanded" -#define XPDFNentryPosition "entryPosition" -#define XPDFNselectionCallback "selectionCallback" - -#define XPDFCentryParent "EntryParent" -#define XPDFCentryExpanded "EntryExpanded" -#define XPDFCentryPosition "EntryPosition" - -typedef struct { - int reason; - XEvent *event; - Widget selectedItem; -} XPDFTreeSelectCallbackStruct; - -extern Widget XPDFCreateTree(Widget parent, char *name, - ArgList argList, Cardinal argCount); - -} // extern "C" - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFTreeP.h b/thirdparty/xpdf/3.02/src/xpdf/XPDFTreeP.h deleted file mode 100644 index 85cb12e5..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFTreeP.h +++ /dev/null @@ -1,88 +0,0 @@ -//======================================================================== -// -// XPDFTreeP.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XPDFTREEP_H -#define XPDFTREEP_H - -#include -#include -#include "XPDFTree.h" - -extern "C" { - -typedef void (*XPDFLayoutProc)(Widget widget, Widget instigator); -typedef void (*XPDFCalcSizeProc)(Widget widget, Widget instigator, - Dimension *totalWidth, - Dimension *totalHeight); -typedef Boolean (*XPDFNeedRelayoutProc)(Widget oldWidget, Widget newWidget); - -#define XPDFInheritCreateGC ((XtWidgetProc)_XtInherit) -#define XPDFInheritDestroyGC ((XtWidgetProc)_XtInherit) -#define XPDFInheritLayout ((XPDFLayoutProc)_XtInherit) -#define XPDFInheritCalcSize ((XPDFCalcSizeProc)_XtInherit) -#define XPDFInheritNeedRelayout ((XPDFNeedRelayoutProc)_XtInherit) - -typedef struct { - XtWidgetProc createGC; - XtWidgetProc destroyGC; - XPDFLayoutProc layout; - XPDFCalcSizeProc calcSize; - XPDFNeedRelayoutProc needRelayout; - XtPointer extension; -} XPDFTreeClassPart; - -typedef struct _XPDFTreeClassRec { - CoreClassPart coreClass; - CompositeClassPart compositeClass; - ConstraintClassPart constraintClass; - XmManagerClassPart managerClass; - XPDFTreeClassPart treeClass; -} XPDFTreeClassRec; - -externalref XPDFTreeClassRec xpdfTreeClassRec; - -typedef struct _XPDFTreeEntry XPDFTreeEntry; - -typedef struct { - Dimension marginWidth; - Dimension marginHeight; - XtCallbackList selectCallback; - GC plainGC; - GC dottedGC; - XPDFTreeEntry *root; - int redrawY; -} XPDFTreePart; - -typedef struct _XPDFTreeRec { - CorePart core; - CompositePart composite; - ConstraintPart constraint; - XmManagerPart manager; - XPDFTreePart tree; -} XPDFTreeRec; - -#define XPDFTreeIndex (XmManagerIndex + 1) - -typedef struct _XPDFTreeConstraintPart { - Widget entryParent; - Boolean entryExpanded; - int entryPosition; - XPDFTreeEntry *e; -} XPDFTreeConstraintPart, *XPDFTreeConstraint; - -typedef struct _XPDFTreeConstraintRec { - XmManagerConstraintPart manager; - XPDFTreeConstraintPart tree; -} XPDFTreeConstraintRec, *XPDFTreeConstraintPtr; - -#define XPDFTreeCPart(w) \ - (&((XPDFTreeConstraintPtr)(w)->core.constraints)->tree) - -} // extern "C" - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.cc b/thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.cc deleted file mode 100644 index 828ccaa3..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.cc +++ /dev/null @@ -1,3526 +0,0 @@ -//======================================================================== -// -// XPDFViewer.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#ifdef HAVE_X11_XPM_H -#include -#endif -#if defined(__sgi) && (XmVERSION <= 1) -#define Object XtObject -#include -#undef Object -#endif -#include "gmem.h" -#include "gfile.h" -#include "GString.h" -#include "GList.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PDFDoc.h" -#include "Link.h" -#include "ErrorCodes.h" -#include "Outline.h" -#include "UnicodeMap.h" -#ifndef DISABLE_OUTLINE -#define Object XtObject -#include "XPDFTree.h" -#undef Object -#endif -#include "XPDFApp.h" -#include "XPDFViewer.h" -#include "PSOutputDev.h" -#include "config.h" - -// these macro defns conflict with xpdf's Object class -#ifdef LESSTIF_VERSION -#undef XtDisplay -#undef XtScreen -#undef XtWindow -#undef XtParent -#undef XtIsRealized -#endif - -#if XmVERSION <= 1 -#define XmSET True -#define XmUNSET False -#endif - -// hack around old X includes which are missing these symbols -#ifndef XK_Page_Up -#define XK_Page_Up 0xFF55 -#endif -#ifndef XK_Page_Down -#define XK_Page_Down 0xFF56 -#endif -#ifndef XK_KP_Home -#define XK_KP_Home 0xFF95 -#endif -#ifndef XK_KP_Left -#define XK_KP_Left 0xFF96 -#endif -#ifndef XK_KP_Up -#define XK_KP_Up 0xFF97 -#endif -#ifndef XK_KP_Right -#define XK_KP_Right 0xFF98 -#endif -#ifndef XK_KP_Down -#define XK_KP_Down 0xFF99 -#endif -#ifndef XK_KP_Prior -#define XK_KP_Prior 0xFF9A -#endif -#ifndef XK_KP_Page_Up -#define XK_KP_Page_Up 0xFF9A -#endif -#ifndef XK_KP_Next -#define XK_KP_Next 0xFF9B -#endif -#ifndef XK_KP_Page_Down -#define XK_KP_Page_Down 0xFF9B -#endif -#ifndef XK_KP_End -#define XK_KP_End 0xFF9C -#endif -#ifndef XK_KP_Begin -#define XK_KP_Begin 0xFF9D -#endif -#ifndef XK_KP_Insert -#define XK_KP_Insert 0xFF9E -#endif -#ifndef XK_KP_Delete -#define XK_KP_Delete 0xFF9F -#endif - -//------------------------------------------------------------------------ -// GUI includes -//------------------------------------------------------------------------ - -#include "xpdfIcon.xpm" -#include "leftArrow.xbm" -#include "leftArrowDis.xbm" -#include "dblLeftArrow.xbm" -#include "dblLeftArrowDis.xbm" -#include "rightArrow.xbm" -#include "rightArrowDis.xbm" -#include "dblRightArrow.xbm" -#include "dblRightArrowDis.xbm" -#include "backArrow.xbm" -#include "backArrowDis.xbm" -#include "forwardArrow.xbm" -#include "forwardArrowDis.xbm" -#include "find.xbm" -#include "findDis.xbm" -#include "print.xbm" -#include "printDis.xbm" -#include "about.xbm" -#include "about-text.h" - -//------------------------------------------------------------------------ - -struct ZoomMenuInfo { - char *label; - double zoom; -}; - -static ZoomMenuInfo zoomMenuInfo[nZoomMenuItems] = { - { "400%", 400 }, - { "200%", 200 }, - { "150%", 150 }, - { "125%", 125 }, - { "100%", 100 }, - { "50%", 50 }, - { "25%", 25 }, - { "12.5%", 12.5 }, - { "fit page", zoomPage }, - { "fit width", zoomWidth } -}; - -#define maxZoomIdx 0 -#define defZoomIdx 3 -#define minZoomIdx 7 -#define zoomPageIdx 8 -#define zoomWidthIdx 9 - -//------------------------------------------------------------------------ - -#define cmdMaxArgs 8 - -XPDFViewerCmd XPDFViewer::cmdTab[] = { - { "about", 0, gFalse, gFalse, &XPDFViewer::cmdAbout }, - { "closeOutline", 0, gFalse, gFalse, &XPDFViewer::cmdCloseOutline }, - { "closeWindow", 0, gFalse, gFalse, &XPDFViewer::cmdCloseWindow }, - { "continuousMode", 0, gFalse, gFalse, &XPDFViewer::cmdContinuousMode }, - { "endPan", 0, gTrue, gTrue, &XPDFViewer::cmdEndPan }, - { "endSelection", 0, gTrue, gTrue, &XPDFViewer::cmdEndSelection }, - { "find", 0, gTrue, gFalse, &XPDFViewer::cmdFind }, - { "findNext", 0, gTrue, gFalse, &XPDFViewer::cmdFindNext }, - { "focusToDocWin", 0, gFalse, gFalse, &XPDFViewer::cmdFocusToDocWin }, - { "focusToPageNum", 0, gFalse, gFalse, &XPDFViewer::cmdFocusToPageNum }, - { "followLink", 0, gTrue, gTrue, &XPDFViewer::cmdFollowLink }, - { "followLinkInNewWin", 0, gTrue, gTrue, &XPDFViewer::cmdFollowLinkInNewWin }, - { "followLinkInNewWinNoSel", 0, gTrue, gTrue, &XPDFViewer::cmdFollowLinkInNewWinNoSel }, - { "followLinkNoSel", 0, gTrue, gTrue, &XPDFViewer::cmdFollowLinkNoSel }, - { "fullScreenMode", 0, gFalse, gFalse, &XPDFViewer::cmdFullScreenMode }, - { "goBackward", 0, gFalse, gFalse, &XPDFViewer::cmdGoBackward }, - { "goForward", 0, gFalse, gFalse, &XPDFViewer::cmdGoForward }, - { "gotoDest", 1, gTrue, gFalse, &XPDFViewer::cmdGotoDest }, - { "gotoLastPage", 0, gTrue, gFalse, &XPDFViewer::cmdGotoLastPage }, - { "gotoLastPageNoScroll", 0, gTrue, gFalse, &XPDFViewer::cmdGotoLastPageNoScroll }, - { "gotoPage", 1, gTrue, gFalse, &XPDFViewer::cmdGotoPage }, - { "gotoPageNoScroll", 1, gTrue, gFalse, &XPDFViewer::cmdGotoPageNoScroll }, - { "nextPage", 0, gTrue, gFalse, &XPDFViewer::cmdNextPage }, - { "nextPageNoScroll", 0, gTrue, gFalse, &XPDFViewer::cmdNextPageNoScroll }, - { "open", 0, gFalse, gFalse, &XPDFViewer::cmdOpen }, - { "openFile", 1, gFalse, gFalse, &XPDFViewer::cmdOpenFile }, - { "openFileAtDest", 2, gFalse, gFalse, &XPDFViewer::cmdOpenFileAtDest }, - { "openFileAtDestInNewWin", 2, gFalse, gFalse, &XPDFViewer::cmdOpenFileAtDestInNewWin }, - { "openFileAtPage", 2, gFalse, gFalse, &XPDFViewer::cmdOpenFileAtPage }, - { "openFileAtPageInNewWin", 2, gFalse, gFalse, &XPDFViewer::cmdOpenFileAtPageInNewWin }, - { "openFileInNewWin", 1, gFalse, gFalse, &XPDFViewer::cmdOpenFileInNewWin }, - { "openInNewWin", 0, gFalse, gFalse, &XPDFViewer::cmdOpenInNewWin }, - { "openOutline", 0, gFalse, gFalse, &XPDFViewer::cmdOpenOutline }, - { "pageDown", 0, gTrue, gFalse, &XPDFViewer::cmdPageDown }, - { "pageUp", 0, gTrue, gFalse, &XPDFViewer::cmdPageUp }, - { "postPopupMenu", 0, gFalse, gTrue, &XPDFViewer::cmdPostPopupMenu }, - { "prevPage", 0, gTrue, gFalse, &XPDFViewer::cmdPrevPage }, - { "prevPageNoScroll", 0, gTrue, gFalse, &XPDFViewer::cmdPrevPageNoScroll }, - { "print", 0, gTrue, gFalse, &XPDFViewer::cmdPrint }, - { "quit", 0, gFalse, gFalse, &XPDFViewer::cmdQuit }, - { "raise", 0, gFalse, gFalse, &XPDFViewer::cmdRaise }, - { "redraw", 0, gTrue, gFalse, &XPDFViewer::cmdRedraw }, - { "reload", 0, gTrue, gFalse, &XPDFViewer::cmdReload }, - { "rotateCCW", 0, gTrue, gFalse, &XPDFViewer::cmdRotateCCW }, - { "rotateCW", 0, gTrue, gFalse, &XPDFViewer::cmdRotateCW }, - { "run", 1, gFalse, gFalse, &XPDFViewer::cmdRun }, - { "scrollDown", 1, gTrue, gFalse, &XPDFViewer::cmdScrollDown }, - { "scrollDownNextPage", 1, gTrue, gFalse, &XPDFViewer::cmdScrollDownNextPage }, - { "scrollLeft", 1, gTrue, gFalse, &XPDFViewer::cmdScrollLeft }, - { "scrollOutlineDown", 1, gTrue, gFalse, &XPDFViewer::cmdScrollOutlineDown }, - { "scrollOutlineUp", 1, gTrue, gFalse, &XPDFViewer::cmdScrollOutlineUp }, - { "scrollRight", 1, gTrue, gFalse, &XPDFViewer::cmdScrollRight }, - { "scrollToBottomEdge", 0, gTrue, gFalse, &XPDFViewer::cmdScrollToBottomEdge }, - { "scrollToBottomRight", 0, gTrue, gFalse, &XPDFViewer::cmdScrollToBottomRight }, - { "scrollToLeftEdge", 0, gTrue, gFalse, &XPDFViewer::cmdScrollToLeftEdge }, - { "scrollToRightEdge", 0, gTrue, gFalse, &XPDFViewer::cmdScrollToRightEdge }, - { "scrollToTopEdge", 0, gTrue, gFalse, &XPDFViewer::cmdScrollToTopEdge }, - { "scrollToTopLeft", 0, gTrue, gFalse, &XPDFViewer::cmdScrollToTopLeft }, - { "scrollUp", 1, gTrue, gFalse, &XPDFViewer::cmdScrollUp }, - { "scrollUpPrevPage", 1, gTrue, gFalse, &XPDFViewer::cmdScrollUpPrevPage }, - { "setSelection", 5, gTrue, gFalse, &XPDFViewer::cmdSetSelection }, - { "singlePageMode", 0, gFalse, gFalse, &XPDFViewer::cmdSinglePageMode }, - { "startPan", 0, gTrue, gTrue, &XPDFViewer::cmdStartPan }, - { "startSelection", 0, gTrue, gTrue, &XPDFViewer::cmdStartSelection }, - { "toggleContinuousMode", 0, gFalse, gFalse, &XPDFViewer::cmdToggleContinuousMode }, - { "toggleFullScreenMode", 0, gFalse, gFalse, &XPDFViewer::cmdToggleFullScreenMode }, - { "toggleOutline", 0, gFalse, gFalse, &XPDFViewer::cmdToggleOutline }, - { "windowMode", 0, gFalse, gFalse, &XPDFViewer::cmdWindowMode }, - { "zoomFitPage", 0, gFalse, gFalse, &XPDFViewer::cmdZoomFitPage }, - { "zoomFitWidth", 0, gFalse, gFalse, &XPDFViewer::cmdZoomFitWidth }, - { "zoomIn", 0, gFalse, gFalse, &XPDFViewer::cmdZoomIn }, - { "zoomOut", 0, gFalse, gFalse, &XPDFViewer::cmdZoomOut }, - { "zoomPercent", 1, gFalse, gFalse, &XPDFViewer::cmdZoomPercent }, - { "zoomToSelection", 0, gTrue, gFalse, &XPDFViewer::cmdZoomToSelection } -}; - -#define nCmds (sizeof(cmdTab) / sizeof(XPDFViewerCmd)) - -//------------------------------------------------------------------------ - -XPDFViewer::XPDFViewer(XPDFApp *appA, GString *fileName, - int pageA, GString *destName, GBool fullScreen, - GString *ownerPassword, GString *userPassword) { - LinkDest *dest; - int pg; - double z; - - app = appA; - win = NULL; - core = NULL; - ok = gFalse; -#ifndef DISABLE_OUTLINE - outlineLabels = NULL; - outlineLabelsLength = outlineLabelsSize = 0; - outlinePaneWidth = 175; -#endif - - // do Motif-specific initialization and create the window; - // this also creates the core object - initWindow(fullScreen); - initAboutDialog(); - initFindDialog(); - initPrintDialog(); - openDialog = NULL; - saveAsDialog = NULL; - - dest = NULL; // make gcc happy - pg = pageA; // make gcc happy - - if (fileName) { - if (loadFile(fileName, ownerPassword, userPassword)) { - getPageAndDest(pageA, destName, &pg, &dest); -#ifndef DISABLE_OUTLINE - if (outlineScroll != None && - core->getDoc()->getOutline()->getItems() && - core->getDoc()->getOutline()->getItems()->getLength() > 0) { - XtVaSetValues(outlineScroll, XmNwidth, outlinePaneWidth, NULL); - } -#endif - } else { - return; - } - } - core->resizeToPage(pg); - - // map the window -- we do this after calling resizeToPage to avoid - // an annoying on-screen resize - mapWindow(); - - // display the first page - z = core->getZoom(); - if (dest) { - displayDest(dest, z, core->getRotate(), gTrue); - delete dest; - } else { - displayPage(pg, z, core->getRotate(), gTrue, gTrue); - } - - ok = gTrue; -} - -XPDFViewer::XPDFViewer(XPDFApp *appA, PDFDoc *doc, int pageA, - GString *destName, GBool fullScreen) { - LinkDest *dest; - int pg; - double z; - - app = appA; - win = NULL; - core = NULL; - ok = gFalse; -#ifndef DISABLE_OUTLINE - outlineLabels = NULL; - outlineLabelsLength = outlineLabelsSize = 0; - outlinePaneWidth = 175; -#endif - - // do Motif-specific initialization and create the window; - // this also creates the core object - initWindow(fullScreen); - initAboutDialog(); - initFindDialog(); - initPrintDialog(); - openDialog = NULL; - saveAsDialog = NULL; - - dest = NULL; // make gcc happy - pg = pageA; // make gcc happy - - if (doc) { - core->loadDoc(doc); - getPageAndDest(pageA, destName, &pg, &dest); -#ifndef DISABLE_OUTLINE - if (outlineScroll != None && - core->getDoc()->getOutline()->getItems() && - core->getDoc()->getOutline()->getItems()->getLength() > 0) { - XtVaSetValues(outlineScroll, XmNwidth, outlinePaneWidth, NULL); - } -#endif - } - core->resizeToPage(pg); - - // map the window -- we do this after calling resizeToPage to avoid - // an annoying on-screen resize - mapWindow(); - - // display the first page - z = core->getZoom(); - if (dest) { - displayDest(dest, z, core->getRotate(), gTrue); - delete dest; - } else { - displayPage(pg, z, core->getRotate(), gTrue, gTrue); - } - - ok = gTrue; -} - -XPDFViewer::~XPDFViewer() { - delete core; - XmFontListFree(aboutBigFont); - XmFontListFree(aboutVersionFont); - XmFontListFree(aboutFixedFont); - closeWindow(); -#ifndef DISABLE_OUTLINE - if (outlineLabels) { - gfree(outlineLabels); - } -#endif -} - -void XPDFViewer::open(GString *fileName, int pageA, GString *destName) { - LinkDest *dest; - int pg; - double z; - - if (!core->getDoc() || fileName->cmp(core->getDoc()->getFileName())) { - if (!loadFile(fileName, NULL, NULL)) { - return; - } - } - getPageAndDest(pageA, destName, &pg, &dest); - z = core->getZoom(); - if (dest) { - displayDest(dest, z, core->getRotate(), gTrue); - delete dest; - } else { - displayPage(pg, z, core->getRotate(), gTrue, gTrue); - } -} - -void XPDFViewer::clear() { - char *title; - XmString s; - - core->clear(); - - // set up title - title = app->getTitle() ? app->getTitle()->getCString() - : (char *)xpdfAppName; - XtVaSetValues(win, XmNtitle, title, XmNiconName, title, NULL); - - if (toolBar != None) { - - // set up number-of-pages display - s = XmStringCreateLocalized(""); - XtVaSetValues(pageNumText, XmNlabelString, s, NULL); - XmStringFree(s); - s = XmStringCreateLocalized(" of 0"); - XtVaSetValues(pageCountLabel, XmNlabelString, s, NULL); - XmStringFree(s); - - // disable buttons - XtVaSetValues(prevTenPageBtn, XmNsensitive, False, NULL); - XtVaSetValues(prevPageBtn, XmNsensitive, False, NULL); - XtVaSetValues(nextTenPageBtn, XmNsensitive, False, NULL); - XtVaSetValues(nextPageBtn, XmNsensitive, False, NULL); - } - - // remove the old outline -#ifndef DISABLE_OUTLINE - setupOutline(); -#endif -} - -//------------------------------------------------------------------------ -// load / display -//------------------------------------------------------------------------ - -GBool XPDFViewer::loadFile(GString *fileName, GString *ownerPassword, - GString *userPassword) { - return core->loadFile(fileName, ownerPassword, userPassword) == errNone; -} - -void XPDFViewer::reloadFile() { - int pg; - - if (!core->getDoc()) { - return; - } - pg = core->getPageNum(); - loadFile(core->getDoc()->getFileName()); - if (pg > core->getDoc()->getNumPages()) { - pg = core->getDoc()->getNumPages(); - } - displayPage(pg, core->getZoom(), core->getRotate(), gFalse, gFalse); -} - -void XPDFViewer::displayPage(int pageA, double zoomA, int rotateA, - GBool scrollToTop, GBool addToHist) { - core->displayPage(pageA, zoomA, rotateA, scrollToTop, addToHist); -} - -void XPDFViewer::displayDest(LinkDest *dest, double zoomA, int rotateA, - GBool addToHist) { - core->displayDest(dest, zoomA, rotateA, addToHist); -} - -void XPDFViewer::getPageAndDest(int pageA, GString *destName, - int *pageOut, LinkDest **destOut) { - Ref pageRef; - - // find the page number for a named destination - *pageOut = pageA; - *destOut = NULL; - if (destName && (*destOut = core->getDoc()->findDest(destName))) { - if ((*destOut)->isPageRef()) { - pageRef = (*destOut)->getPageRef(); - *pageOut = core->getDoc()->findPage(pageRef.num, pageRef.gen); - } else { - *pageOut = (*destOut)->getPageNum(); - } - } - - if (*pageOut <= 0) { - *pageOut = 1; - } - if (*pageOut > core->getDoc()->getNumPages()) { - *pageOut = core->getDoc()->getNumPages(); - } -} - -//------------------------------------------------------------------------ -// hyperlinks / actions -//------------------------------------------------------------------------ - -void XPDFViewer::doLink(int wx, int wy, GBool onlyIfNoSelection, - GBool newWin) { - XPDFViewer *newViewer; - LinkAction *action; - int pg, selPg; - double xu, yu, selULX, selULY, selLRX, selLRY; - - if (core->getHyperlinksEnabled() && - core->cvtWindowToUser(wx, wy, &pg, &xu, &yu) && - !(onlyIfNoSelection && - core->getSelection(&selPg, &selULX, &selULY, &selLRX, &selLRY))) { - if ((action = core->findLink(pg, xu, yu))) { - if (newWin && - core->getDoc()->getFileName() && - (action->getKind() == actionGoTo || - action->getKind() == actionGoToR || - (action->getKind() == actionNamed && - ((LinkNamed *)action)->getName()->cmp("Quit")))) { - newViewer = app->open(core->getDoc()->getFileName()); - newViewer->core->doAction(action); - } else { - core->doAction(action); - } - } - } -} - -void XPDFViewer::actionCbk(void *data, char *action) { - XPDFViewer *viewer = (XPDFViewer *)data; - - if (!strcmp(action, "Quit")) { - viewer->app->quit(); - } -} - -//------------------------------------------------------------------------ -// keyboard/mouse input -//------------------------------------------------------------------------ - -void XPDFViewer::keyPressCbk(void *data, KeySym key, Guint modifiers, - XEvent *event) { - XPDFViewer *viewer = (XPDFViewer *)data; - int keyCode; - GList *cmds; - int i; - - if (key >= 0x20 && key <= 0xfe) { - keyCode = (int)key; - } else if (key == XK_Tab || - key == XK_KP_Tab) { - keyCode = xpdfKeyCodeTab; - } else if (key == XK_Return) { - keyCode = xpdfKeyCodeReturn; - } else if (key == XK_KP_Enter) { - keyCode = xpdfKeyCodeEnter; - } else if (key == XK_BackSpace) { - keyCode = xpdfKeyCodeBackspace; - } else if (key == XK_Insert || - key == XK_KP_Insert) { - keyCode = xpdfKeyCodeInsert; - } else if (key == XK_Delete || - key == XK_KP_Delete) { - keyCode = xpdfKeyCodeDelete; - } else if (key == XK_Home || - key == XK_KP_Home) { - keyCode = xpdfKeyCodeHome; - } else if (key == XK_End || - key == XK_KP_End) { - keyCode = xpdfKeyCodeEnd; - } else if (key == XK_Page_Up || - key == XK_KP_Page_Up) { - keyCode = xpdfKeyCodePgUp; - } else if (key == XK_Page_Down || - key == XK_KP_Page_Down) { - keyCode = xpdfKeyCodePgDn; - } else if (key == XK_Left || - key == XK_KP_Left) { - keyCode = xpdfKeyCodeLeft; - } else if (key == XK_Right || - key == XK_KP_Right) { - keyCode = xpdfKeyCodeRight; - } else if (key == XK_Up || - key == XK_KP_Up) { - keyCode = xpdfKeyCodeUp; - } else if (key == XK_Down || - key == XK_KP_Down) { - keyCode = xpdfKeyCodeDown; - } else if (key >= XK_F1 && key <= XK_F35) { - keyCode = xpdfKeyCodeF1 + (key - XK_F1); - } else { - return; - } - - if ((cmds = globalParams->getKeyBinding(keyCode, - viewer->getModifiers(modifiers), - viewer->getContext(modifiers)))) { - for (i = 0; i < cmds->getLength(); ++i) { - viewer->execCmd((GString *)cmds->get(i), event); - } - deleteGList(cmds, GString); - } -} - -void XPDFViewer::mouseCbk(void *data, XEvent *event) { - XPDFViewer *viewer = (XPDFViewer *)data; - int keyCode; - GList *cmds; - int i; - - if (event->type == ButtonPress) { - if (event->xbutton.button >= 1 && event->xbutton.button <= 32) { - keyCode = xpdfKeyCodeMousePress1 + event->xbutton.button - 1; - } else { - return; - } - } else if (event->type == ButtonRelease) { - if (event->xbutton.button >= 1 && event->xbutton.button <= 32) { - keyCode = xpdfKeyCodeMouseRelease1 + event->xbutton.button - 1; - } else { - return; - } - } else { - return; - } - - if ((cmds = globalParams->getKeyBinding(keyCode, - viewer->getModifiers( - event->xkey.state), - viewer->getContext( - event->xkey.state)))) { - for (i = 0; i < cmds->getLength(); ++i) { - viewer->execCmd((GString *)cmds->get(i), event); - } - deleteGList(cmds, GString); - } -} - -int XPDFViewer::getModifiers(Guint modifiers) { - int mods; - - mods = 0; - if (modifiers & ShiftMask) { - mods |= xpdfKeyModShift; - } - if (modifiers & ControlMask) { - mods |= xpdfKeyModCtrl; - } - if (modifiers & Mod1Mask) { - mods |= xpdfKeyModAlt; - } - return mods; -} - -int XPDFViewer::getContext(Guint modifiers) { - int context; - - context = (core->getFullScreen() ? xpdfKeyContextFullScreen - : xpdfKeyContextWindow) | - (core->getContinuousMode() ? xpdfKeyContextContinuous - : xpdfKeyContextSinglePage) | - (core->getLinkAction() ? xpdfKeyContextOverLink - : xpdfKeyContextOffLink) | - ((modifiers & Mod5Mask) ? xpdfKeyContextScrLockOn - : xpdfKeyContextScrLockOff); - return context; -} - -void XPDFViewer::execCmd(GString *cmd, XEvent *event) { - GString *name; - GString *args[cmdMaxArgs]; - char *p0, *p1; - int nArgs, i; - int a, b, m, cmp; - - //----- parse the command - name = NULL; - nArgs = 0; - for (i = 0; i < cmdMaxArgs; ++i) { - args[i] = NULL; - } - p0 = cmd->getCString(); - for (p1 = p0; *p1 && isalnum(*p1); ++p1) ; - if (p1 == p0) { - goto err1; - } - name = new GString(p0, p1 - p0); - if (*p1 == '(') { - while (nArgs < cmdMaxArgs) { - p0 = p1 + 1; - for (p1 = p0; *p1 && *p1 != ',' && *p1 != ')'; ++p1) ; - args[nArgs++] = new GString(p0, p1 - p0); - if (*p1 != ',') { - break; - } - } - if (*p1 != ')') { - goto err1; - } - ++p1; - } - if (*p1) { - goto err1; - } - - //----- find the command - a = -1; - b = nCmds; - // invariant: cmdTab[a].name < name < cmdTab[b].name - while (b - a > 1) { - m = (a + b) / 2; - cmp = strcmp(cmdTab[m].name, name->getCString()); - if (cmp < 0) { - a = m; - } else if (cmp > 0) { - b = m; - } else { - a = b = m; - } - } - if (cmp != 0) { - goto err1; - } - - //----- execute the command - if (nArgs != cmdTab[a].nArgs || - (cmdTab[a].requiresEvent && !event)) { - goto err1; - } - if (cmdTab[a].requiresDoc && !core->getDoc()) { - // don't issue an error message for this -- it happens, e.g., when - // clicking in a window with no open PDF file - goto err2; - } - (this->*cmdTab[a].func)(args, nArgs, event); - - //----- clean up - delete name; - for (i = 0; i < nArgs; ++i) { - if (args[i]) { - delete args[i]; - } - } - return; - - err1: - error(errConfig, -1, "Invalid command syntax: '{0:t}'", cmd); - err2: - if (name) { - delete name; - } - for (i = 0; i < nArgs; ++i) { - if (args[i]) { - delete args[i]; - } - } -} - -//------------------------------------------------------------------------ -// command functions -//------------------------------------------------------------------------ - -static int mouseX(XEvent *event) { - switch (event->type) { - case ButtonPress: - case ButtonRelease: - return event->xbutton.x; - case KeyPress: - return event->xkey.x; - } - return 0; -} - -static int mouseY(XEvent *event) { - switch (event->type) { - case ButtonPress: - case ButtonRelease: - return event->xbutton.y; - case KeyPress: - return event->xkey.y; - } - return 0; -} - -void XPDFViewer::cmdAbout(GString *args[], int nArgs, - XEvent *event) { - XtManageChild(aboutDialog); -} - -void XPDFViewer::cmdCloseOutline(GString *args[], int nArgs, - XEvent *event) { -#ifndef DISABLE_OUTLINE - Dimension w; - - if (outlineScroll == None) { - return; - } - XtVaGetValues(outlineScroll, XmNwidth, &w, NULL); - if (w > 1) { - outlinePaneWidth = w; - // this ugly kludge is apparently the only way to resize the panes - // within an XmPanedWindow - XtVaSetValues(outlineScroll, XmNpaneMinimum, 1, - XmNpaneMaximum, 1, NULL); - XtVaSetValues(outlineScroll, XmNpaneMinimum, 1, - XmNpaneMaximum, 10000, NULL); - } -#endif -} - -void XPDFViewer::cmdCloseWindow(GString *args[], int nArgs, - XEvent *event) { - app->close(this, gFalse); -} - -void XPDFViewer::cmdContinuousMode(GString *args[], int nArgs, - XEvent *event) { - Widget btn; - - if (core->getContinuousMode()) { - return; - } - core->setContinuousMode(gTrue); - - btn = XtNameToWidget(popupMenu, "continuousMode"); - XtVaSetValues(btn, XmNset, XmSET, NULL); -} - -void XPDFViewer::cmdEndPan(GString *args[], int nArgs, - XEvent *event) { - core->endPan(mouseX(event), mouseY(event)); -} - -void XPDFViewer::cmdEndSelection(GString *args[], int nArgs, - XEvent *event) { - core->endSelection(mouseX(event), mouseY(event)); -} - -void XPDFViewer::cmdFind(GString *args[], int nArgs, - XEvent *event) { - mapFindDialog(); -} - -void XPDFViewer::cmdFindNext(GString *args[], int nArgs, - XEvent *event) { - doFind(gTrue); -} - -void XPDFViewer::cmdFocusToDocWin(GString *args[], int nArgs, - XEvent *event) { - core->takeFocus(); -} - -void XPDFViewer::cmdFocusToPageNum(GString *args[], int nArgs, - XEvent *event) { - if (toolBar != None) { - XmTextFieldSetSelection(pageNumText, 0, - strlen(XmTextFieldGetString(pageNumText)), - XtLastTimestampProcessed(display)); - XmProcessTraversal(pageNumText, XmTRAVERSE_CURRENT); - } -} - -void XPDFViewer::cmdFollowLink(GString *args[], int nArgs, - XEvent *event) { - doLink(mouseX(event), mouseY(event), gFalse, gFalse); -} - -void XPDFViewer::cmdFollowLinkInNewWin(GString *args[], int nArgs, - XEvent *event) { - doLink(mouseX(event), mouseY(event), gFalse, gTrue); -} - -void XPDFViewer::cmdFollowLinkInNewWinNoSel(GString *args[], int nArgs, - XEvent *event) { - doLink(mouseX(event), mouseY(event), gTrue, gTrue); -} - -void XPDFViewer::cmdFollowLinkNoSel(GString *args[], int nArgs, - XEvent *event) { - doLink(mouseX(event), mouseY(event), gTrue, gFalse); -} - -void XPDFViewer::cmdFullScreenMode(GString *args[], int nArgs, - XEvent *event) { - PDFDoc *doc; - XPDFViewer *viewer; - int pg; - Widget btn; - - if (core->getFullScreen()) { - return; - } - pg = core->getPageNum(); - XtPopdown(win); - doc = core->takeDoc(gFalse); - viewer = app->reopen(this, doc, pg, gTrue); - - btn = XtNameToWidget(viewer->popupMenu, "fullScreen"); - XtVaSetValues(btn, XmNset, XmSET, NULL); -} - -void XPDFViewer::cmdGoBackward(GString *args[], int nArgs, - XEvent *event) { - core->goBackward(); -} - -void XPDFViewer::cmdGoForward(GString *args[], int nArgs, - XEvent *event) { - core->goForward(); -} - -void XPDFViewer::cmdGotoDest(GString *args[], int nArgs, - XEvent *event) { - int pg; - LinkDest *dest; - - getPageAndDest(1, args[0], &pg, &dest); - if (dest) { - displayDest(dest, core->getZoom(), core->getRotate(), gTrue); - delete dest; - } -} - -void XPDFViewer::cmdGotoLastPage(GString *args[], int nArgs, - XEvent *event) { - displayPage(core->getDoc()->getNumPages(), - core->getZoom(), core->getRotate(), - gTrue, gTrue); -} - -void XPDFViewer::cmdGotoLastPageNoScroll(GString *args[], int nArgs, - XEvent *event) { - displayPage(core->getDoc()->getNumPages(), - core->getZoom(), core->getRotate(), - gFalse, gTrue); -} - -void XPDFViewer::cmdGotoPage(GString *args[], int nArgs, - XEvent *event) { - int pg; - - pg = atoi(args[0]->getCString()); - if (pg < 1 || pg > core->getDoc()->getNumPages()) { - return; - } - displayPage(pg, core->getZoom(), core->getRotate(), gTrue, gTrue); -} - -void XPDFViewer::cmdGotoPageNoScroll(GString *args[], int nArgs, - XEvent *event) { - int pg; - - pg = atoi(args[0]->getCString()); - if (pg < 1 || pg > core->getDoc()->getNumPages()) { - return; - } - displayPage(pg, core->getZoom(), core->getRotate(), gFalse, gTrue); -} - -void XPDFViewer::cmdNextPage(GString *args[], int nArgs, - XEvent *event) { - core->gotoNextPage(1, gTrue); -} - -void XPDFViewer::cmdNextPageNoScroll(GString *args[], int nArgs, - XEvent *event) { - core->gotoNextPage(1, gFalse); -} - -void XPDFViewer::cmdOpen(GString *args[], int nArgs, - XEvent *event) { - mapOpenDialog(gFalse); -} - -void XPDFViewer::cmdOpenFile(GString *args[], int nArgs, - XEvent *event) { - open(args[0], 1, NULL); -} - -void XPDFViewer::cmdOpenFileAtDest(GString *args[], int nArgs, - XEvent *event) { - open(args[0], 1, args[1]); -} - -void XPDFViewer::cmdOpenFileAtDestInNewWin(GString *args[], int nArgs, - XEvent *event) { - app->openAtDest(args[0], args[1]); -} - -void XPDFViewer::cmdOpenFileAtPage(GString *args[], int nArgs, - XEvent *event) { - open(args[0], atoi(args[1]->getCString()), NULL); -} - -void XPDFViewer::cmdOpenFileAtPageInNewWin(GString *args[], int nArgs, - XEvent *event) { - app->open(args[0], atoi(args[1]->getCString())); -} - -void XPDFViewer::cmdOpenFileInNewWin(GString *args[], int nArgs, - XEvent *event) { - app->open(args[0]); -} - -void XPDFViewer::cmdOpenInNewWin(GString *args[], int nArgs, - XEvent *event) { - mapOpenDialog(gTrue); -} - -void XPDFViewer::cmdOpenOutline(GString *args[], int nArgs, - XEvent *event) { -#ifndef DISABLE_OUTLINE - Dimension w; - - if (outlineScroll == None) { - return; - } - XtVaGetValues(outlineScroll, XmNwidth, &w, NULL); - if (w == 1) { - // this ugly kludge is apparently the only way to resize the panes - // within an XmPanedWindow - XtVaSetValues(outlineScroll, XmNpaneMinimum, outlinePaneWidth, - XmNpaneMaximum, outlinePaneWidth, NULL); - XtVaSetValues(outlineScroll, XmNpaneMinimum, 1, - XmNpaneMaximum, 10000, NULL); - } -#endif -} - -void XPDFViewer::cmdPageDown(GString *args[], int nArgs, - XEvent *event) { - core->scrollPageDown(); -} - -void XPDFViewer::cmdPageUp(GString *args[], int nArgs, - XEvent *event) { - core->scrollPageUp(); -} - -void XPDFViewer::cmdPostPopupMenu(GString *args[], int nArgs, - XEvent *event) { - XmMenuPosition(popupMenu, event->type == ButtonPress ? &event->xbutton - : (XButtonEvent *)NULL); - XtManageChild(popupMenu); - - // this is magic (taken from DDD) - weird things happen if this - // call isn't made (this is done in two different places, in hopes - // of squashing this stupid bug) - XtUngrabButton(core->getDrawAreaWidget(), AnyButton, AnyModifier); -} - -void XPDFViewer::cmdPrevPage(GString *args[], int nArgs, - XEvent *event) { - core->gotoPrevPage(1, gTrue, gFalse); -} - -void XPDFViewer::cmdPrevPageNoScroll(GString *args[], int nArgs, - XEvent *event) { - core->gotoPrevPage(1, gFalse, gFalse); -} - -void XPDFViewer::cmdPrint(GString *args[], int nArgs, - XEvent *event) { - XtManageChild(printDialog); -} - -void XPDFViewer::cmdQuit(GString *args[], int nArgs, - XEvent *event) { - app->quit(); -} - -void XPDFViewer::cmdRaise(GString *args[], int nArgs, - XEvent *event) { - XMapRaised(display, XtWindow(win)); - XFlush(display); -} - -void XPDFViewer::cmdRedraw(GString *args[], int nArgs, - XEvent *event) { - displayPage(core->getPageNum(), core->getZoom(), core->getRotate(), - gFalse, gFalse); -} - -void XPDFViewer::cmdReload(GString *args[], int nArgs, - XEvent *event) { - reloadFile(); -} - -void XPDFViewer::cmdRotateCCW(GString *args[], int nArgs, - XEvent *event) { - int r; - - r = core->getRotate(); - r = (r == 0) ? 270 : r - 90; - displayPage(core->getPageNum(), core->getZoom(), r, gTrue, gFalse); -} - -void XPDFViewer::cmdRotateCW(GString *args[], int nArgs, - XEvent *event) { - int r; - - r = core->getRotate(); - r = (r == 270) ? 0 : r + 90; - displayPage(core->getPageNum(), core->getZoom(), r, gTrue, gFalse); -} - -void XPDFViewer::cmdRun(GString *args[], int nArgs, - XEvent *event) { - GString *fmt, *cmd, *s; - LinkAction *action; - double selLRX, selLRY, selURX, selURY; - int selPage; - GBool gotSel; - char buf[64]; - char *p; - char c0, c1; - int i; - - cmd = new GString(); - fmt = args[0]; - i = 0; - gotSel = gFalse; - while (i < fmt->getLength()) { - c0 = fmt->getChar(i); - if (c0 == '%' && i+1 < fmt->getLength()) { - c1 = fmt->getChar(i+1); - switch (c1) { - case 'f': - if (core->getDoc() && (s = core->getDoc()->getFileName())) { - cmd->append(s); - } - break; - case 'b': - if (core->getDoc() && (s = core->getDoc()->getFileName())) { - if ((p = strrchr(s->getCString(), '.'))) { - cmd->append(s->getCString(), p - s->getCString()); - } else { - cmd->append(s); - } - } - break; - case 'u': - if ((action = core->getLinkAction()) && - action->getKind() == actionURI) { - s = core->mungeURL(((LinkURI *)action)->getURI()); - cmd->append(s); - delete s; - } - break; - case 'p': - if (core->getDoc()) { - sprintf(buf, "%d", core->getPageNum()); - cmd->append(buf); - } - break; - case 'x': - case 'y': - case 'X': - case 'Y': - if (!gotSel) { - if (!core->getSelection(&selPage, &selURX, &selURY, - &selLRX, &selLRY)) { - selPage = 0; - selURX = selURY = selLRX = selLRY = 0; - } - gotSel = gTrue; - } - sprintf(buf, "%g", - (c1 == 'x') ? selURX : - (c1 == 'y') ? selURY : - (c1 == 'X') ? selLRX : selLRY); - cmd->append(buf); - break; - default: - cmd->append(c1); - break; - } - i += 2; - } else { - cmd->append(c0); - ++i; - } - } -#ifdef VMS - cmd->insert(0, "spawn/nowait "); -#elif defined(__EMX__) - cmd->insert(0, "start /min /n "); -#else - cmd->append(" &"); -#endif - system(cmd->getCString()); - delete cmd; -} - -void XPDFViewer::cmdScrollDown(GString *args[], int nArgs, - XEvent *event) { - core->scrollDown(atoi(args[0]->getCString())); -} - -void XPDFViewer::cmdScrollDownNextPage(GString *args[], int nArgs, - XEvent *event) { - core->scrollDownNextPage(atoi(args[0]->getCString())); -} - -void XPDFViewer::cmdScrollLeft(GString *args[], int nArgs, - XEvent *event) { - core->scrollLeft(atoi(args[0]->getCString())); -} - -void XPDFViewer::cmdScrollOutlineDown(GString *args[], int nArgs, - XEvent *event) { -#ifndef DISABLE_OUTLINE - Widget sb; - int val, inc, pageInc, m, slider; - - if (outlineScroll == None) { - return; - } - if ((sb = XtNameToWidget(outlineScroll, "VertScrollBar"))) { - XtVaGetValues(sb, XmNvalue, &val, XmNincrement, &inc, - XmNpageIncrement, &pageInc, XmNmaximum, &m, - XmNsliderSize, &slider, NULL); - if ((val += inc * atoi(args[0]->getCString())) > m - slider) { - val = m - slider; - } - XmScrollBarSetValues(sb, val, slider, inc, pageInc, True); - } -#endif -} - -void XPDFViewer::cmdScrollOutlineUp(GString *args[], int nArgs, - XEvent *event) { -#ifndef DISABLE_OUTLINE - Widget sb; - int val, inc, pageInc, m, slider; - - if (outlineScroll == None) { - return; - } - if ((sb = XtNameToWidget(outlineScroll, "VertScrollBar"))) { - XtVaGetValues(sb, XmNvalue, &val, XmNincrement, &inc, - XmNpageIncrement, &pageInc, XmNminimum, &m, - XmNsliderSize, &slider, NULL); - if ((val -= inc * atoi(args[0]->getCString())) < m) { - val = m; - } - XmScrollBarSetValues(sb, val, slider, inc, pageInc, True); - } -#endif -} - -void XPDFViewer::cmdScrollRight(GString *args[], int nArgs, - XEvent *event) { - core->scrollRight(atoi(args[0]->getCString())); -} - -void XPDFViewer::cmdScrollToBottomEdge(GString *args[], int nArgs, - XEvent *event) { - core->scrollToBottomEdge(); -} - -void XPDFViewer::cmdScrollToBottomRight(GString *args[], int nArgs, - XEvent *event) { - core->scrollToBottomRight(); -} - -void XPDFViewer::cmdScrollToLeftEdge(GString *args[], int nArgs, - XEvent *event) { - core->scrollToLeftEdge(); -} - -void XPDFViewer::cmdScrollToRightEdge(GString *args[], int nArgs, - XEvent *event) { - core->scrollToRightEdge(); -} - -void XPDFViewer::cmdScrollToTopEdge(GString *args[], int nArgs, - XEvent *event) { - core->scrollToTopEdge(); -} - -void XPDFViewer::cmdScrollToTopLeft(GString *args[], int nArgs, - XEvent *event) { - core->scrollToTopLeft(); -} - -void XPDFViewer::cmdScrollUp(GString *args[], int nArgs, - XEvent *event) { - core->scrollUp(atoi(args[0]->getCString())); -} - -void XPDFViewer::cmdScrollUpPrevPage(GString *args[], int nArgs, - XEvent *event) { - core->scrollUpPrevPage(atoi(args[0]->getCString())); -} - -void XPDFViewer::cmdSetSelection(GString *args[], int nArgs, XEvent *event) { - int pg, ulx, uly, lrx, lry; - - pg = atoi(args[0]->getCString()); - core->cvtUserToDev(core->getPageNum(), - atof(args[1]->getCString()), atof(args[2]->getCString()), - &ulx, &uly); - core->cvtUserToDev(core->getPageNum(), - atof(args[3]->getCString()), atof(args[4]->getCString()), - &lrx, &lry); - core->setSelection(pg, ulx, uly, lrx, lry); -} - -void XPDFViewer::cmdSinglePageMode(GString *args[], int nArgs, - XEvent *event) { - Widget btn; - - if (!core->getContinuousMode()) { - return; - } - core->setContinuousMode(gFalse); - - btn = XtNameToWidget(popupMenu, "continuousMode"); - XtVaSetValues(btn, XmNset, XmUNSET, NULL); -} - -void XPDFViewer::cmdStartPan(GString *args[], int nArgs, - XEvent *event) { - core->startPan(mouseX(event), mouseY(event)); -} - -void XPDFViewer::cmdStartSelection(GString *args[], int nArgs, - XEvent *event) { - core->startSelection(mouseX(event), mouseY(event)); -} - -void XPDFViewer::cmdToggleContinuousMode(GString *args[], int nArgs, - XEvent *event) { - if (core->getContinuousMode()) { - cmdSinglePageMode(NULL, 0, event); - } else { - cmdContinuousMode(NULL, 0, event); - } -} - -void XPDFViewer::cmdToggleFullScreenMode(GString *args[], int nArgs, - XEvent *event) { - if (core->getFullScreen()) { - cmdWindowMode(NULL, 0, event); - } else { - cmdFullScreenMode(NULL, 0, event); - } -} - -void XPDFViewer::cmdToggleOutline(GString *args[], int nArgs, - XEvent *event) { -#ifndef DISABLE_OUTLINE - Dimension w; - - if (outlineScroll == None) { - return; - } - XtVaGetValues(outlineScroll, XmNwidth, &w, NULL); - if (w > 1) { - cmdCloseOutline(NULL, 0, event); - } else { - cmdOpenOutline(NULL, 0, event); - } -#endif -} - -void XPDFViewer::cmdWindowMode(GString *args[], int nArgs, - XEvent *event) { - PDFDoc *doc; - XPDFViewer *viewer; - int pg; - Widget btn; - - if (!core->getFullScreen()) { - return; - } - pg = core->getPageNum(); - XtPopdown(win); - doc = core->takeDoc(gFalse); - viewer = app->reopen(this, doc, pg, gFalse); - - btn = XtNameToWidget(viewer->popupMenu, "fullScreen"); - XtVaSetValues(btn, XmNset, XmUNSET, NULL); -} - -void XPDFViewer::cmdZoomFitPage(GString *args[], int nArgs, - XEvent *event) { - if (core->getZoom() != zoomPage) { - setZoomIdx(zoomPageIdx); - displayPage(core->getPageNum(), zoomPage, - core->getRotate(), gTrue, gFalse); - } -} - -void XPDFViewer::cmdZoomFitWidth(GString *args[], int nArgs, - XEvent *event) { - if (core->getZoom() != zoomWidth) { - setZoomIdx(zoomWidthIdx); - displayPage(core->getPageNum(), zoomWidth, - core->getRotate(), gTrue, gFalse); - } -} - -void XPDFViewer::cmdZoomIn(GString *args[], int nArgs, - XEvent *event) { - int z; - - z = getZoomIdx(); - if (z <= minZoomIdx && z > maxZoomIdx) { - --z; - setZoomIdx(z); - displayPage(core->getPageNum(), zoomMenuInfo[z].zoom, - core->getRotate(), gTrue, gFalse); - } -} - -void XPDFViewer::cmdZoomOut(GString *args[], int nArgs, - XEvent *event) { - int z; - - z = getZoomIdx(); - if (z < minZoomIdx && z >= maxZoomIdx) { - ++z; - setZoomIdx(z); - displayPage(core->getPageNum(), zoomMenuInfo[z].zoom, - core->getRotate(), gTrue, gFalse); - } -} - -void XPDFViewer::cmdZoomPercent(GString *args[], int nArgs, - XEvent *event) { - double z; - - z = atof(args[0]->getCString()); - setZoomVal(z); - displayPage(core->getPageNum(), z, core->getRotate(), gTrue, gFalse); -} - -void XPDFViewer::cmdZoomToSelection(GString *args[], int nArgs, - XEvent *event) { - int pg; - double ulx, uly, lrx, lry; - - if (core->getSelection(&pg, &ulx, &uly, &lrx, &lry)) { - core->zoomToRect(pg, ulx, uly, lrx, lry); - } -} - -//------------------------------------------------------------------------ -// GUI code: main window -//------------------------------------------------------------------------ - -void XPDFViewer::initWindow(GBool fullScreen) { - Colormap colormap; - XColor xcol; - Atom state, val; - Arg args[20]; - int n; - char *title; - - display = XtDisplay(app->getAppShell()); - screenNum = XScreenNumberOfScreen(XtScreen(app->getAppShell())); - - toolBar = None; -#ifndef DISABLE_OUTLINE - outlineScroll = None; -#endif - - // private colormap - if (app->getInstallCmap()) { - XtVaGetValues(app->getAppShell(), XmNcolormap, &colormap, NULL); - // ensure that BlackPixel and WhitePixel are reserved in the - // new colormap - xcol.red = xcol.green = xcol.blue = 0; - XAllocColor(display, colormap, &xcol); - xcol.red = xcol.green = xcol.blue = 65535; - XAllocColor(display, colormap, &xcol); - colormap = XCopyColormapAndFree(display, colormap); - } - - // top-level window - n = 0; - title = app->getTitle() ? app->getTitle()->getCString() - : (char *)xpdfAppName; - XtSetArg(args[n], XmNtitle, title); ++n; - XtSetArg(args[n], XmNiconName, title); ++n; - XtSetArg(args[n], XmNminWidth, 100); ++n; - XtSetArg(args[n], XmNminHeight, 100); ++n; - XtSetArg(args[n], XmNbaseWidth, 0); ++n; - XtSetArg(args[n], XmNbaseHeight, 0); ++n; - XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); ++n; - win = XtCreatePopupShell("win", topLevelShellWidgetClass, - app->getAppShell(), args, n); - if (app->getInstallCmap()) { - XtVaSetValues(win, XmNcolormap, colormap, NULL); - } - XmAddWMProtocolCallback(win, XInternAtom(display, "WM_DELETE_WINDOW", False), - &closeMsgCbk, this); - - // create the full-screen window - if (fullScreen) { - initCore(win, gTrue); - - // create the normal (non-full-screen) window - } else { - if (app->getGeometry()) { - n = 0; - XtSetArg(args[n], XmNgeometry, app->getGeometry()->getCString()); ++n; - XtSetValues(win, args, n); - } - - n = 0; - form = XmCreateForm(win, "form", args, n); - XtManageChild(form); - -#ifdef DISABLE_OUTLINE - initToolbar(form); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetValues(toolBar, args, n); - - initCore(form, gFalse); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, toolBar); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetValues(core->getWidget(), args, n); -#else - initToolbar(form); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetValues(toolBar, args, n); - - initPanedWin(form); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, toolBar); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetValues(panedWin, args, n); - - initCore(panedWin, fullScreen); - n = 0; - XtSetArg(args[n], XmNpositionIndex, 1); ++n; - XtSetArg(args[n], XmNallowResize, True); ++n; - XtSetArg(args[n], XmNpaneMinimum, 1); ++n; - XtSetArg(args[n], XmNpaneMaximum, 10000); ++n; - XtSetValues(core->getWidget(), args, n); -#endif - } - - // set the zoom menu to match the initial zoom setting - setZoomVal(core->getZoom()); - - // set traversal order - XtVaSetValues(core->getDrawAreaWidget(), - XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, NULL); - if (toolBar != None) { - XtVaSetValues(backBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(prevTenPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(prevPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(nextPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(nextTenPageBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(forwardBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(pageNumText, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(zoomWidget, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(findBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(printBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(aboutBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - XtVaSetValues(quitBtn, XmNnavigationType, XmEXCLUSIVE_TAB_GROUP, - NULL); - } - - initPopupMenu(); - - if (fullScreen) { - // Set both the old-style Motif decorations hint and the new-style - // _NET_WM_STATE property. This is redundant, but might be useful - // for older window managers. We also set the geometry to +0+0 to - // avoid interactive placement. (Note: we need to realize the - // shell, so it has a Window on which to set the _NET_WM_STATE - // property, but we don't want to map it until later, so we set - // mappedWhenManaged to false.) - n = 0; - XtSetArg(args[n], XmNmappedWhenManaged, False); ++n; - XtSetArg(args[n], XmNmwmDecorations, 0); ++n; - XtSetArg(args[n], XmNgeometry, "+0+0"); ++n; - XtSetValues(win, args, n); - XtRealizeWidget(win); - state = XInternAtom(display, "_NET_WM_STATE", False); - val = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", False); - XChangeProperty(display, XtWindow(win), state, XA_ATOM, 32, - PropModeReplace, (Guchar *)&val, 1); - } -} - -void XPDFViewer::initToolbar(Widget parent) { - Widget label, lastBtn; -#ifndef USE_COMBO_BOX - Widget btn; -#endif - Arg args[20]; - int n; - XmString s, emptyString; - int i; - - // toolbar - n = 0; - toolBar = XmCreateForm(parent, "toolBar", args, n); - XtManageChild(toolBar); - - // create an empty string -- this is used for buttons that will get - // pixmaps later - emptyString = XmStringCreateLocalized(""); - - // page movement buttons - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - backBtn = XmCreatePushButton(toolBar, "back", args, n); - addToolTip(backBtn, "Back"); - XtManageChild(backBtn); - XtAddCallback(backBtn, XmNactivateCallback, - &backCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, backBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - prevTenPageBtn = XmCreatePushButton(toolBar, "prevTenPage", args, n); - addToolTip(prevTenPageBtn, "-10 pages"); - XtManageChild(prevTenPageBtn); - XtAddCallback(prevTenPageBtn, XmNactivateCallback, - &prevTenPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, prevTenPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - prevPageBtn = XmCreatePushButton(toolBar, "prevPage", args, n); - addToolTip(prevPageBtn, "Previous page"); - XtManageChild(prevPageBtn); - XtAddCallback(prevPageBtn, XmNactivateCallback, - &prevPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, prevPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - nextPageBtn = XmCreatePushButton(toolBar, "nextPage", args, n); - addToolTip(nextPageBtn, "Next page"); - XtManageChild(nextPageBtn); - XtAddCallback(nextPageBtn, XmNactivateCallback, - &nextPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, nextPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - nextTenPageBtn = XmCreatePushButton(toolBar, "nextTenPage", args, n); - addToolTip(nextTenPageBtn, "+10 pages"); - XtManageChild(nextTenPageBtn); - XtAddCallback(nextTenPageBtn, XmNactivateCallback, - &nextTenPageCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, nextTenPageBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - forwardBtn = XmCreatePushButton(toolBar, "forward", args, n); - addToolTip(forwardBtn, "Forward"); - XtManageChild(forwardBtn); - XtAddCallback(forwardBtn, XmNactivateCallback, - &forwardCbk, (XtPointer)this); - - // page number display - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, forwardBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized("Page "); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(toolBar, "pageLabel", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, label); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 3); ++n; - XtSetArg(args[n], XmNmarginHeight, 3); ++n; - XtSetArg(args[n], XmNcolumns, 5); ++n; - pageNumText = XmCreateTextField(toolBar, "pageNum", args, n); - XtManageChild(pageNumText); - XtAddCallback(pageNumText, XmNactivateCallback, - &pageNumCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, pageNumText); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized(" of 00000"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); ++n; - XtSetArg(args[n], XmNrecomputeSize, False); ++n; - pageCountLabel = XmCreateLabel(toolBar, "pageCountLabel", args, n); - XmStringFree(s); - XtManageChild(pageCountLabel); - s = XmStringCreateLocalized(" of 0"); - XtVaSetValues(pageCountLabel, XmNlabelString, s, NULL); - XmStringFree(s); - - // zoom menu -#if USE_COMBO_BOX - XmString st[nZoomMenuItems]; - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, pageCountLabel); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 0); ++n; - XtSetArg(args[n], XmNmarginHeight, 0); ++n; - XtSetArg(args[n], XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX); ++n; - XtSetArg(args[n], XmNpositionMode, XmONE_BASED); ++n; - XtSetArg(args[n], XmNcolumns, 7); ++n; - for (i = 0; i < nZoomMenuItems; ++i) { - st[i] = XmStringCreateLocalized(zoomMenuInfo[i].label); - } - XtSetArg(args[n], XmNitems, st); ++n; - XtSetArg(args[n], XmNitemCount, nZoomMenuItems); ++n; - zoomComboBox = XmCreateComboBox(toolBar, "zoomComboBox", args, n); - for (i = 0; i < nZoomMenuItems; ++i) { - XmStringFree(st[i]); - } - addToolTip(zoomComboBox, "Zoom"); - XtAddCallback(zoomComboBox, XmNselectionCallback, - &zoomComboBoxCbk, (XtPointer)this); - XtManageChild(zoomComboBox); - zoomWidget = zoomComboBox; -#else - Widget menuPane; - char buf[16]; - n = 0; - menuPane = XmCreatePulldownMenu(toolBar, "zoomMenuPane", args, n); - for (i = 0; i < nZoomMenuItems; ++i) { - n = 0; - s = XmStringCreateLocalized(zoomMenuInfo[i].label); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, (XtPointer)i); ++n; - sprintf(buf, "zoom%d", i); - btn = XmCreatePushButton(menuPane, buf, args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &zoomMenuCbk, (XtPointer)this); - zoomMenuBtns[i] = btn; - } - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, pageCountLabel); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 0); ++n; - XtSetArg(args[n], XmNmarginHeight, 0); ++n; - XtSetArg(args[n], XmNsubMenuId, menuPane); ++n; - zoomMenu = XmCreateOptionMenu(toolBar, "zoomMenu", args, n); - addToolTip(zoomMenu, "Zoom"); - XtManageChild(zoomMenu); - zoomWidget = zoomMenu; -#endif - - // find/print/about buttons - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, zoomWidget); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - findBtn = XmCreatePushButton(toolBar, "find", args, n); - addToolTip(findBtn, "Find"); - XtManageChild(findBtn); - XtAddCallback(findBtn, XmNactivateCallback, - &findCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, findBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - printBtn = XmCreatePushButton(toolBar, "print", args, n); - addToolTip(printBtn, "Print"); - XtManageChild(printBtn); - XtAddCallback(printBtn, XmNactivateCallback, - &printCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, printBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - XtSetArg(args[n], XmNlabelString, emptyString); ++n; - aboutBtn = XmCreatePushButton(toolBar, "about", args, n); - addToolTip(aboutBtn, "About / help"); - XtManageChild(aboutBtn); - XtAddCallback(aboutBtn, XmNactivateCallback, - &aboutCbk, (XtPointer)this); - lastBtn = aboutBtn; - - // quit button - n = 0; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNmarginWidth, 6); ++n; - s = XmStringCreateLocalized("Quit"); - XtSetArg(args[n], XmNlabelString, s); ++n; - quitBtn = XmCreatePushButton(toolBar, "quit", args, n); - XmStringFree(s); - XtManageChild(quitBtn); - XtAddCallback(quitBtn, XmNactivateCallback, - &quitCbk, (XtPointer)this); - - // link label - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, lastBtn); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNrightWidget, quitBtn); ++n; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized(""); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNrecomputeSize, True); ++n; - XtSetArg(args[n], XmNalignment, XmALIGNMENT_BEGINNING); ++n; - linkLabel = XmCreateLabel(toolBar, "linkLabel", args, n); - XmStringFree(s); - XtManageChild(linkLabel); - - XmStringFree(emptyString); -} - -#ifndef DISABLE_OUTLINE -void XPDFViewer::initPanedWin(Widget parent) { - Widget clipWin; - Arg args[20]; - int n; - - // paned window - n = 0; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; -#if defined(__sgi) && (XmVERSION <= 1) - panedWin = SgCreateHorzPanedWindow(parent, "panedWin", args, n); -#else - panedWin = XmCreatePanedWindow(parent, "panedWin", args, n); -#endif - XtManageChild(panedWin); - - // scrolled window for outline container - n = 0; - XtSetArg(args[n], XmNpositionIndex, 0); ++n; - XtSetArg(args[n], XmNallowResize, True); ++n; - XtSetArg(args[n], XmNpaneMinimum, 1); ++n; - XtSetArg(args[n], XmNpaneMaximum, 10000); ++n; -#if !(defined(__sgi) && (XmVERSION <= 1)) - XtSetArg(args[n], XmNwidth, 1); ++n; -#endif - XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); ++n; - outlineScroll = XmCreateScrolledWindow(panedWin, "outlineScroll", args, n); - XtManageChild(outlineScroll); - XtVaGetValues(outlineScroll, XmNclipWindow, &clipWin, NULL); - XtVaSetValues(clipWin, XmNbackground, app->getPaperPixel(), NULL); - - // outline tree - n = 0; - XtSetArg(args[n], XmNbackground, app->getPaperPixel()); ++n; - outlineTree = XPDFCreateTree(outlineScroll, "outlineTree", args, n); - XtManageChild(outlineTree); - XtAddCallback(outlineTree, XPDFNselectionCallback, &outlineSelectCbk, - (XtPointer)this); -} -#endif - -void XPDFViewer::initCore(Widget parent, GBool fullScreen) { - core = new XPDFCore(win, parent, - app->getPaperRGB(), app->getPaperPixel(), - app->getMattePixel(fullScreen), - fullScreen, app->getReverseVideo(), - app->getInstallCmap(), app->getRGBCubeSize()); - core->setUpdateCbk(&updateCbk, this); - core->setActionCbk(&actionCbk, this); - core->setKeyPressCbk(&keyPressCbk, this); - core->setMouseCbk(&mouseCbk, this); -} - -void XPDFViewer::initPopupMenu() { - Widget btn; - Arg args[20]; - int n; - XmString s, s2; - - n = 0; -#if XmVersion < 1002 - // older versions of Motif need this, newer ones choke on it, - // sometimes not displaying the menu at all, maybe depending on the - // state of the NumLock key (taken from DDD) - XtSetArg(args[n], XmNmenuPost, ""); ++n; -#endif - popupMenu = XmCreatePopupMenu(core->getDrawAreaWidget(), "popupMenu", - args, n); - n = 0; - s = XmStringCreateLocalized("Open..."); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("O"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "open", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &openCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Open in new window..."); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "openInNewWindow", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &openInNewWindowCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Reload"); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("R"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "reload", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &reloadCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Save as..."); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "saveAs", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &saveAsCbk, (XtPointer)this); - n = 0; - btn = XmCreateSeparator(popupMenu, "sep1", args, n); - XtManageChild(btn); - n = 0; - s = XmStringCreateLocalized("Continuous view"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n; - XtSetArg(args[n], XmNvisibleWhenOff, True); ++n; - XtSetArg(args[n], XmNset, core->getContinuousMode() ? XmSET : XmUNSET); ++n; - btn = XmCreateToggleButton(popupMenu, "continuousMode", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNvalueChangedCallback, - &continuousModeToggleCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Full screen"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n; - XtSetArg(args[n], XmNvisibleWhenOff, True); ++n; - XtSetArg(args[n], XmNset, core->getFullScreen() ? XmSET : XmUNSET); ++n; - btn = XmCreateToggleButton(popupMenu, "fullScreen", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNvalueChangedCallback, - &fullScreenToggleCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Rotate counterclockwise"); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "rotateCCW", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &rotateCCWCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Rotate clockwise"); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "rotateCW", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &rotateCWCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Zoom to selection"); - XtSetArg(args[n], XmNlabelString, s); ++n; - btn = XmCreatePushButton(popupMenu, "zoomToSelection", args, n); - XmStringFree(s); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &zoomToSelectionCbk, (XtPointer)this); - n = 0; - btn = XmCreateSeparator(popupMenu, "sep2", args, n); - XtManageChild(btn); - n = 0; - s = XmStringCreateLocalized("Close"); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("Ctrl+W"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "close", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &closeCbk, (XtPointer)this); - n = 0; - s = XmStringCreateLocalized("Quit"); - XtSetArg(args[n], XmNlabelString, s); ++n; - s2 = XmStringCreateLocalized("Q"); - XtSetArg(args[n], XmNacceleratorText, s2); ++n; - btn = XmCreatePushButton(popupMenu, "quit", args, n); - XmStringFree(s); - XmStringFree(s2); - XtManageChild(btn); - XtAddCallback(btn, XmNactivateCallback, - &quitCbk, (XtPointer)this); - - // this is magic (taken from DDD) - weird things happen if this - // call isn't made - XtUngrabButton(core->getDrawAreaWidget(), AnyButton, AnyModifier); -} - -void XPDFViewer::addToolTip(Widget widget, char *text) { -#ifdef XmNtoolTipString - XmString s; - Cardinal n, i; - WidgetList children; - - if (XtIsComposite(widget)) { - XtVaGetValues(widget, XmNnumChildren, &n, XmNchildren, &children, NULL); - for (i = 0; i < n; ++i) { - addToolTip(children[i], text); - } - } else { - s = XmStringCreateLocalized(text); - XtVaSetValues(widget, XmNtoolTipString, s, NULL); - XmStringFree(s); - } -#endif -} - -void XPDFViewer::mapWindow() { -#ifdef HAVE_X11_XPM_H - Pixmap iconPixmap; -#endif - int depth; - Pixel fg, bg, arm; - - // show the window - XtPopup(win, XtGrabNone); - core->takeFocus(); - - // create the icon -#ifdef HAVE_X11_XPM_H - if (XpmCreatePixmapFromData(display, XtWindow(win), xpdfIcon, - &iconPixmap, NULL, NULL) == XpmSuccess) { - XtVaSetValues(win, XmNiconPixmap, iconPixmap, NULL); - } -#endif - - // set button bitmaps (must be done after the window is mapped) - if (toolBar != None) { - XtVaGetValues(backBtn, XmNdepth, &depth, - XmNforeground, &fg, XmNbackground, &bg, - XmNarmColor, &arm, NULL); - XtVaSetValues(backBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrow_bits, - backArrow_width, - backArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrow_bits, - backArrow_width, - backArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)backArrowDis_bits, - backArrowDis_width, - backArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(prevTenPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrow_bits, - dblLeftArrow_width, - dblLeftArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrow_bits, - dblLeftArrow_width, - dblLeftArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblLeftArrowDis_bits, - dblLeftArrowDis_width, - dblLeftArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(prevPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrow_bits, - leftArrow_width, - leftArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrow_bits, - leftArrow_width, - leftArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)leftArrowDis_bits, - leftArrowDis_width, - leftArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(nextPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrow_bits, - rightArrow_width, - rightArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrow_bits, - rightArrow_width, - rightArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)rightArrowDis_bits, - rightArrowDis_width, - rightArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(nextTenPageBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrow_bits, - dblRightArrow_width, - dblRightArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrow_bits, - dblRightArrow_width, - dblRightArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)dblRightArrowDis_bits, - dblRightArrowDis_width, - dblRightArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(forwardBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrow_bits, - forwardArrow_width, - forwardArrow_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrow_bits, - forwardArrow_width, - forwardArrow_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)forwardArrowDis_bits, - forwardArrowDis_width, - forwardArrowDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(findBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)find_bits, - find_width, - find_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)find_bits, - find_width, - find_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)findDis_bits, - findDis_width, - findDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(printBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)print_bits, - print_width, - print_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)print_bits, - print_width, - print_height, - fg, arm, depth), - XmNlabelInsensitivePixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)printDis_bits, - printDis_width, - printDis_height, - fg, bg, depth), - NULL); - XtVaSetValues(aboutBtn, XmNlabelType, XmPIXMAP, - XmNlabelPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)about_bits, - about_width, - about_height, - fg, bg, depth), - XmNarmPixmap, - XCreatePixmapFromBitmapData(display, XtWindow(toolBar), - (char *)about_bits, - about_width, - about_height, - fg, arm, depth), - NULL); - } -} - -void XPDFViewer::closeWindow() { - XtPopdown(win); - XtDestroyWidget(win); -} - -int XPDFViewer::getZoomIdx() { - int i; - - for (i = 0; i < nZoomMenuItems; ++i) { - if (core->getZoom() == zoomMenuInfo[i].zoom) { - return i; - } - } - return -1; -} - -void XPDFViewer::setZoomIdx(int idx) { - if (toolBar == None) { - return; - } -#if USE_COMBO_BOX - XtVaSetValues(zoomComboBox, XmNselectedPosition, idx + 1, NULL); -#else - XtVaSetValues(zoomMenu, XmNmenuHistory, zoomMenuBtns[idx], NULL); -#endif -} - -void XPDFViewer::setZoomVal(double z) { - if (toolBar == None) { - return; - } - -#if USE_COMBO_BOX - char buf[32]; - XmString s; - int i; - - for (i = 0; i < nZoomMenuItems; ++i) { - if (z == zoomMenuInfo[i].zoom) { - XtVaSetValues(zoomComboBox, XmNselectedPosition, i + 1, NULL); - return; - } - } - sprintf(buf, "%d%%", (int)z); - s = XmStringCreateLocalized(buf); - XtVaSetValues(zoomComboBox, XmNselectedItem, s, NULL); - XmStringFree(s); -#else - int i; - - for (i = 0; i < nZoomMenuItems; ++i) { - if (z == zoomMenuInfo[i].zoom) { - XtVaSetValues(zoomMenu, XmNmenuHistory, zoomMenuBtns[i], NULL); - return; - } - } - for (i = maxZoomIdx; i < minZoomIdx; ++i) { - if (z > zoomMenuInfo[i].zoom) { - break; - } - } - XtVaSetValues(zoomMenu, XmNmenuHistory, zoomMenuBtns[i], NULL); -#endif -} - -void XPDFViewer::prevPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoPrevPage(1, gTrue, gFalse); - viewer->core->takeFocus(); -} - -void XPDFViewer::prevTenPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoPrevPage(10, gTrue, gFalse); - viewer->core->takeFocus(); -} - -void XPDFViewer::nextPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoNextPage(1, gTrue); - viewer->core->takeFocus(); -} - -void XPDFViewer::nextTenPageCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->gotoNextPage(10, gTrue); - viewer->core->takeFocus(); -} - -void XPDFViewer::backCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->goBackward(); - viewer->core->takeFocus(); -} - -void XPDFViewer::forwardCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->core->goForward(); - viewer->core->takeFocus(); -} - -#if USE_COMBO_BOX - -void XPDFViewer::zoomComboBoxCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmComboBoxCallbackStruct *data = (XmComboBoxCallbackStruct *)callData; - double z; - char *s; - XmStringContext context; - XmStringCharSet charSet; - XmStringDirection dir; - Boolean sep; - - z = viewer->core->getZoom(); - if (data->item_position == 0) { - XmStringInitContext(&context, data->item_or_text); - if (XmStringGetNextSegment(context, &s, &charSet, &dir, &sep)) { - z = atof(s); - if (z <= 1) { - z = defZoom; - } - XtFree(charSet); - XtFree(s); - } - XmStringFreeContext(context); - } else { - z = zoomMenuInfo[data->item_position - 1].zoom; - } - // only redraw if this was triggered by an event; otherwise - // the caller is responsible for doing the redraw - if (z != viewer->core->getZoom() && data->event) { - viewer->displayPage(viewer->core->getPageNum(), z, - viewer->core->getRotate(), gTrue, gFalse); - } - viewer->core->takeFocus(); -} - -#else // USE_COMBO_BOX - -void XPDFViewer::zoomMenuCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmPushButtonCallbackStruct *data = (XmPushButtonCallbackStruct *)callData; - XtPointer userData; - double z; - - XtVaGetValues(widget, XmNuserData, &userData, NULL); - z = zoomMenuInfo[(long)userData].zoom; - // only redraw if this was triggered by an event; otherwise - // the caller is responsible for doing the redraw - if (z != viewer->core->getZoom() && data->event) { - viewer->displayPage(viewer->core->getPageNum(), z, - viewer->core->getRotate(), gTrue, gFalse); - } - viewer->core->takeFocus(); -} - -#endif // USE_COMBO_BOX - -void XPDFViewer::findCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - if (!viewer->core->getDoc()) { - return; - } - viewer->mapFindDialog(); -} - -void XPDFViewer::printCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - if (!viewer->core->getDoc()) { - return; - } - XtManageChild(viewer->printDialog); -} - -void XPDFViewer::aboutCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - XtManageChild(viewer->aboutDialog); -} - -void XPDFViewer::quitCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->app->quit(); -} - -void XPDFViewer::openCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->mapOpenDialog(gFalse); -} - -void XPDFViewer::openInNewWindowCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->mapOpenDialog(gTrue); -} - -void XPDFViewer::reloadCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->reloadFile(); -} - -void XPDFViewer::saveAsCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - if (!viewer->core->getDoc()) { - return; - } - viewer->mapSaveAsDialog(); -} - -void XPDFViewer::continuousModeToggleCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmToggleButtonCallbackStruct *data = - (XmToggleButtonCallbackStruct *)callData; - - viewer->core->setContinuousMode(data->set == XmSET); -} - -void XPDFViewer::fullScreenToggleCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmToggleButtonCallbackStruct *data = - (XmToggleButtonCallbackStruct *)callData; - - if (data->set == XmSET) { - viewer->cmdFullScreenMode(NULL, 0, NULL); - } else { - viewer->cmdWindowMode(NULL, 0, NULL); - } -} - -void XPDFViewer::rotateCCWCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->cmdRotateCCW(NULL, 0, NULL); -} - -void XPDFViewer::rotateCWCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->cmdRotateCW(NULL, 0, NULL); -} - -void XPDFViewer::zoomToSelectionCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - int pg; - double ulx, uly, lrx, lry; - - if (viewer->core->getSelection(&pg, &ulx, &uly, &lrx, &lry)) { - viewer->core->zoomToRect(pg, ulx, uly, lrx, lry); - } -} - -void XPDFViewer::closeCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->app->close(viewer, gFalse); -} - -void XPDFViewer::closeMsgCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->app->close(viewer, gTrue); -} - -void XPDFViewer::pageNumCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - char *s, *p; - int pg; - char buf[20]; - - if (!viewer->core->getDoc()) { - goto err; - } - s = XmTextFieldGetString(viewer->pageNumText); - for (p = s; *p; ++p) { - if (!isdigit(*p)) { - goto err; - } - } - pg = atoi(s); - if (pg < 1 || pg > viewer->core->getDoc()->getNumPages()) { - goto err; - } - viewer->displayPage(pg, viewer->core->getZoom(), - viewer->core->getRotate(), gFalse, gTrue); - viewer->core->takeFocus(); - return; - - err: - XBell(viewer->display, 0); - sprintf(buf, "%d", viewer->core->getPageNum()); - XmTextFieldSetString(viewer->pageNumText, buf); -} - -void XPDFViewer::updateCbk(void *data, GString *fileName, - int pageNum, int numPages, char *linkString) { - XPDFViewer *viewer = (XPDFViewer *)data; - GString *title; - char buf[20]; - XmString s; - - if (fileName) { - if (!(title = viewer->app->getTitle())) { - title = (new GString(xpdfAppName))->append(": ")->append(fileName); - } - XtVaSetValues(viewer->win, XmNtitle, title->getCString(), - XmNiconName, title->getCString(), NULL); - if (!viewer->app->getTitle()) { - delete title; - } -#ifndef DISABLE_OUTLINE - viewer->setupOutline(); -#endif - viewer->setupPrintDialog(); - } - - if (viewer->toolBar != None) { - if (pageNum >= 0) { - s = XmStringCreateLocalized(""); - XtVaSetValues(viewer->linkLabel, XmNlabelString, s, NULL); - XmStringFree(s); - sprintf(buf, "%d", pageNum); - XmTextFieldSetString(viewer->pageNumText, buf); - XtVaSetValues(viewer->prevTenPageBtn, XmNsensitive, - pageNum > 1, NULL); - XtVaSetValues(viewer->prevPageBtn, XmNsensitive, - pageNum > 1, NULL); - XtVaSetValues(viewer->nextTenPageBtn, XmNsensitive, - pageNum < viewer->core->getDoc()->getNumPages(), NULL); - XtVaSetValues(viewer->nextPageBtn, XmNsensitive, - pageNum < viewer->core->getDoc()->getNumPages(), NULL); - XtVaSetValues(viewer->backBtn, XmNsensitive, - viewer->core->canGoBack(), NULL); - XtVaSetValues(viewer->forwardBtn, XmNsensitive, - viewer->core->canGoForward(), NULL); - } - - if (numPages >= 0) { - sprintf(buf, " of %d", numPages); - s = XmStringCreateLocalized(buf); - XtVaSetValues(viewer->pageCountLabel, XmNlabelString, s, NULL); - XmStringFree(s); - } - - if (linkString) { - s = XmStringCreateLocalized(linkString); - XtVaSetValues(viewer->linkLabel, XmNlabelString, s, NULL); - XmStringFree(s); - } - } -} - - -//------------------------------------------------------------------------ -// GUI code: outline -//------------------------------------------------------------------------ - -#ifndef DISABLE_OUTLINE - -void XPDFViewer::setupOutline() { - GList *items; - UnicodeMap *uMap; - GString *enc; - int i; - - if (outlineScroll == None) { - return; - } - - // unmanage and destroy the old labels - if (outlineLabels) { - XtUnmanageChildren(outlineLabels, outlineLabelsLength); - for (i = 0; i < outlineLabelsLength; ++i) { - XtDestroyWidget(outlineLabels[i]); - } - gfree(outlineLabels); - outlineLabels = NULL; - outlineLabelsLength = outlineLabelsSize = 0; - } - - if (core->getDoc()) { - - // create the new labels - items = core->getDoc()->getOutline()->getItems(); - if (items && items->getLength() > 0) { - enc = new GString("Latin1"); - uMap = globalParams->getUnicodeMap(enc); - delete enc; - setupOutlineItems(items, NULL, uMap); - uMap->decRefCnt(); - } - - // manage the new labels - XtManageChildren(outlineLabels, outlineLabelsLength); - } -} - -void XPDFViewer::setupOutlineItems(GList *items, Widget parent, - UnicodeMap *uMap) { - OutlineItem *item; - GList *kids; - Widget label; - Arg args[20]; - GString *title; - char buf[8]; - XmString s; - int i, j, n; - - for (i = 0; i < items->getLength(); ++i) { - item = (OutlineItem *)items->get(i); - title = new GString(); - for (j = 0; j < item->getTitleLength(); ++j) { - n = uMap->mapUnicode(item->getTitle()[j], buf, sizeof(buf)); - title->append(buf, n); - } - n = 0; - XtSetArg(args[n], XPDFNentryPosition, i); ++n; - if (parent) { - XtSetArg(args[n], XPDFNentryParent, parent); ++n; - } - XtSetArg(args[n], XPDFNentryExpanded, item->isOpen()); ++n; - s = XmStringCreateLocalized(title->getCString()); - delete title; - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNuserData, item); ++n; - XtSetArg(args[n], XmNmarginWidth, 0); ++n; - XtSetArg(args[n], XmNmarginHeight, 2); ++n; - XtSetArg(args[n], XmNshadowThickness, 0); ++n; - XtSetArg(args[n], XmNforeground, - app->getReverseVideo() ? WhitePixel(display, screenNum) - : BlackPixel(display, screenNum)); ++n; - XtSetArg(args[n], XmNbackground, app->getPaperPixel()); ++n; - label = XmCreateLabelGadget(outlineTree, "label", args, n); - XmStringFree(s); - if (outlineLabelsLength == outlineLabelsSize) { - outlineLabelsSize += 64; - outlineLabels = (Widget *)greallocn(outlineLabels, - outlineLabelsSize, sizeof(Widget *)); - } - outlineLabels[outlineLabelsLength++] = label; - item->open(); - if ((kids = item->getKids())) { - setupOutlineItems(kids, label, uMap); - } - } -} - -void XPDFViewer::outlineSelectCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XPDFTreeSelectCallbackStruct *data = - (XPDFTreeSelectCallbackStruct *)callData; - OutlineItem *item; - - XtVaGetValues(data->selectedItem, XmNuserData, &item, NULL); - if (item) { - if (item->getAction()) { - viewer->core->doAction(item->getAction()); - } - } - viewer->core->takeFocus(); -} - -#endif // !DISABLE_OUTLINE - -//------------------------------------------------------------------------ -// GUI code: "about" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initAboutDialog() { - Widget scrolledWin, col, label, sep, closeBtn; - Arg args[20]; - int n, i; - XmString s; - char buf[20]; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": About"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNwidth, 450); ++n; - XtSetArg(args[n], XmNheight, 300); ++n; - aboutDialog = XmCreateFormDialog(win, "aboutDialog", args, n); - XmStringFree(s); - - //----- "close" button - n = 0; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - closeBtn = XmCreatePushButton(aboutDialog, "Close", args, n); - XtManageChild(closeBtn); - n = 0; - XtSetArg(args[n], XmNdefaultButton, closeBtn); ++n; - XtSetArg(args[n], XmNcancelButton, closeBtn); ++n; - XtSetValues(aboutDialog, args, n); - - //----- scrolled window and RowColumn - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, closeBtn); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNscrollingPolicy, XmAUTOMATIC); ++n; - scrolledWin = XmCreateScrolledWindow(aboutDialog, "scrolledWin", args, n); - XtManageChild(scrolledWin); - n = 0; - XtSetArg(args[n], XmNorientation, XmVERTICAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - col = XmCreateRowColumn(scrolledWin, "col", args, n); - XtManageChild(col); - - //----- fonts - aboutBigFont = - createFontList("-*-times-bold-i-normal--20-*-*-*-*-*-iso8859-1"); - aboutVersionFont = - createFontList("-*-times-medium-r-normal--16-*-*-*-*-*-iso8859-1"); - aboutFixedFont = - createFontList("-*-courier-medium-r-normal--12-*-*-*-*-*-iso8859-1"); - - //----- heading - n = 0; - s = XmStringCreateLocalized("Xpdf"); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutBigFont); ++n; - label = XmCreateLabel(col, "h0", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - s = XmStringCreateLocalized("Version " xpdfVersion); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h1", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - s = XmStringCreateLocalized(xpdfCopyright); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h2", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - s = XmStringCreateLocalized(" "); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h3", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - sep = XmCreateSeparator(col, "sep", args, n); - XtManageChild(sep); - n = 0; - s = XmStringCreateLocalized(" "); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutVersionFont); ++n; - label = XmCreateLabel(col, "h4", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - - //----- text - for (i = 0; aboutWinText[i]; ++i) { - n = 0; - s = XmStringCreateLocalized(aboutWinText[i]); - XtSetArg(args[n], XmNlabelString, s); ++n; - XtSetArg(args[n], XmNfontList, aboutFixedFont); ++n; - sprintf(buf, "t%d", i); - label = XmCreateLabel(col, buf, args, n); - XtManageChild(label); - XmStringFree(s); - } -} - -//------------------------------------------------------------------------ -// GUI code: "open" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initOpenDialog() { - Arg args[20]; - int n; - XmString s1, s2, s3; - GString *dir; - - n = 0; - s1 = XmStringCreateLocalized("Open"); - XtSetArg(args[n], XmNokLabelString, s1); ++n; - s2 = XmStringCreateLocalized("*.[Pp][Dd][Ff]"); - XtSetArg(args[n], XmNpattern, s2); ++n; - s3 = XmStringCreateLocalized(xpdfAppName ": Open"); - XtSetArg(args[n], XmNdialogTitle, s3); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - XtSetArg(args[n], XmNautoUnmanage, True); ++n; - openDialog = XmCreateFileSelectionDialog(win, "openDialog", args, n); - XmStringFree(s1); - XmStringFree(s2); - XmStringFree(s3); - XtUnmanageChild(XmFileSelectionBoxGetChild(openDialog, - XmDIALOG_HELP_BUTTON)); - XtAddCallback(openDialog, XmNokCallback, - &openOkCbk, (XtPointer)this); - - if (core->getDoc() && core->getDoc()->getFileName()) { - dir = makePathAbsolute(grabPath( - core->getDoc()->getFileName()->getCString())); - s1 = XmStringCreateLocalized(dir->getCString()); - XtVaSetValues(openDialog, XmNdirectory, s1, NULL); - XmStringFree(s1); - delete dir; - } -} - -void XPDFViewer::mapOpenDialog(GBool openInNewWindowA) { - if (!openDialog) { - initOpenDialog(); - } - openInNewWindow = openInNewWindowA; - XmFileSelectionDoSearch(openDialog, NULL); - XtManageChild(openDialog); -} - -void XPDFViewer::openOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmFileSelectionBoxCallbackStruct *data = - (XmFileSelectionBoxCallbackStruct *)callData; - char *fileName; - XmStringContext context; - XmStringCharSet charSet; - XmStringDirection dir; - Boolean sep; - GString *fileNameStr; - - XmStringInitContext(&context, data->value); - if (XmStringGetNextSegment(context, &fileName, &charSet, &dir, &sep)) { - fileNameStr = new GString(fileName); - if (viewer->openInNewWindow) { - viewer->app->open(fileNameStr); - } else { - if (viewer->loadFile(fileNameStr)) { - viewer->displayPage(1, viewer->core->getZoom(), - viewer->core->getRotate(), gTrue, gTrue); - } - } - delete fileNameStr; - XtFree(charSet); - XtFree(fileName); - } - XmStringFreeContext(context); -} - -//------------------------------------------------------------------------ -// GUI code: "find" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initFindDialog() { - Widget form1, label, okBtn, closeBtn; - Arg args[20]; - int n; - XmString s; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": Find"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNnavigationType, XmNONE); ++n; - XtSetArg(args[n], XmNautoUnmanage, False); ++n; - findDialog = XmCreateFormDialog(win, "findDialog", args, n); - XmStringFree(s); - - //----- "find" and "close" buttons - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - okBtn = XmCreatePushButton(findDialog, "Find", args, n); - XtManageChild(okBtn); - XtAddCallback(okBtn, XmNactivateCallback, - &findFindCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - XtSetArg(args[n], XmNnavigationType, XmEXCLUSIVE_TAB_GROUP); ++n; - closeBtn = XmCreatePushButton(findDialog, "Close", args, n); - XtManageChild(closeBtn); - XtAddCallback(closeBtn, XmNactivateCallback, - &findCloseCbk, (XtPointer)this); - - //----- checkboxes - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, okBtn); ++n; - XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n; -#if XmVERSION <= 1 - XtSetArg(args[n], XmNindicatorOn, True); ++n; -#else - XtSetArg(args[n], XmNindicatorOn, XmINDICATOR_FILL); ++n; -#endif - XtSetArg(args[n], XmNset, XmUNSET); ++n; - s = XmStringCreateLocalized("Search backward"); - XtSetArg(args[n], XmNlabelString, s); ++n; - findBackwardToggle = XmCreateToggleButton(findDialog, "backward", args, n); - XmStringFree(s); - XtManageChild(findBackwardToggle); - n = 0; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, findBackwardToggle); ++n; - XtSetArg(args[n], XmNleftOffset, 16); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, okBtn); ++n; - XtSetArg(args[n], XmNindicatorType, XmN_OF_MANY); ++n; -#if XmVERSION <= 1 - XtSetArg(args[n], XmNindicatorOn, True); ++n; -#else - XtSetArg(args[n], XmNindicatorOn, XmINDICATOR_FILL); ++n; -#endif - XtSetArg(args[n], XmNset, XmUNSET); ++n; - s = XmStringCreateLocalized("Match case"); - XtSetArg(args[n], XmNlabelString, s); ++n; - findCaseSensitiveToggle = - XmCreateToggleButton(findDialog, "matchCase", args, n); - XmStringFree(s); - XtManageChild(findCaseSensitiveToggle); - - //----- search string entry - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNbottomWidget, findBackwardToggle); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 2); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 2); ++n; - form1 = XmCreateForm(findDialog, "form", args, n); - XtManageChild(form1); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - s = XmStringCreateLocalized("Find text: "); - XtSetArg(args[n], XmNlabelString, s); ++n; - label = XmCreateLabel(form1, "label", args, n); - XmStringFree(s); - XtManageChild(label); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNleftWidget, label); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - findText = XmCreateTextField(form1, "text", args, n); - XtManageChild(findText); -#ifdef LESSTIF_VERSION - XtAddCallback(findText, XmNactivateCallback, - &findFindCbk, (XtPointer)this); -#endif - - //----- dialog parameters - n = 0; - XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; - XtSetArg(args[n], XmNcancelButton, closeBtn); ++n; -#if XmVersion > 1001 - XtSetArg(args[n], XmNinitialFocus, findText); ++n; -#endif - XtSetValues(findDialog, args, n); -} - -void XPDFViewer::findFindCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - viewer->doFind(gFalse); -} - -void XPDFViewer::mapFindDialog() { - XmTextFieldSetSelection(findText, 0, XmTextFieldGetLastPosition(findText), - XtLastTimestampProcessed(display)); - XmTextFieldSetInsertionPosition(findText, 0); - XtManageChild(findDialog); -} - -void XPDFViewer::doFind(GBool next) { - if (XtWindow(findDialog)) { - XDefineCursor(display, XtWindow(findDialog), core->getBusyCursor()); - } - core->find(XmTextFieldGetString(findText), - XmToggleButtonGetState(findCaseSensitiveToggle), - next, - XmToggleButtonGetState(findBackwardToggle), - gFalse); - if (XtWindow(findDialog)) { - XUndefineCursor(display, XtWindow(findDialog)); - } -} - -void XPDFViewer::findCloseCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - - XtUnmanageChild(viewer->findDialog); -} - -//------------------------------------------------------------------------ -// GUI code: "save as" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initSaveAsDialog() { - Arg args[20]; - int n; - XmString s1, s2, s3; - GString *dir; - - n = 0; - s1 = XmStringCreateLocalized("Save"); - XtSetArg(args[n], XmNokLabelString, s1); ++n; - s2 = XmStringCreateLocalized("*.[Pp][Dd][Ff]"); - XtSetArg(args[n], XmNpattern, s2); ++n; - s3 = XmStringCreateLocalized(xpdfAppName ": Save as"); - XtSetArg(args[n], XmNdialogTitle, s3); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - XtSetArg(args[n], XmNautoUnmanage, True); ++n; - saveAsDialog = XmCreateFileSelectionDialog(win, "saveAsDialog", args, n); - XmStringFree(s1); - XmStringFree(s2); - XmStringFree(s3); - XtUnmanageChild(XmFileSelectionBoxGetChild(saveAsDialog, - XmDIALOG_HELP_BUTTON)); - XtAddCallback(saveAsDialog, XmNokCallback, - &saveAsOkCbk, (XtPointer)this); - - if (core->getDoc() && core->getDoc()->getFileName()) { - dir = makePathAbsolute(grabPath( - core->getDoc()->getFileName()->getCString())); - s1 = XmStringCreateLocalized(dir->getCString()); - XtVaSetValues(saveAsDialog, XmNdirectory, s1, NULL); - XmStringFree(s1); - delete dir; - } -} - -void XPDFViewer::mapSaveAsDialog() { - if (!saveAsDialog) { - initSaveAsDialog(); - } - XmFileSelectionDoSearch(saveAsDialog, NULL); - XtManageChild(saveAsDialog); -} - -void XPDFViewer::saveAsOkCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmFileSelectionBoxCallbackStruct *data = - (XmFileSelectionBoxCallbackStruct *)callData; - char *fileName; - GString *fileNameStr; - XmStringContext context; - XmStringCharSet charSet; - XmStringDirection dir; - Boolean sep; - - XmStringInitContext(&context, data->value); - if (XmStringGetNextSegment(context, &fileName, &charSet, &dir, &sep)) { - fileNameStr = new GString(fileName); - viewer->core->getDoc()->saveAs(fileNameStr); - delete fileNameStr; - XtFree(charSet); - XtFree(fileName); - } - XmStringFreeContext(context); -} - -//------------------------------------------------------------------------ -// GUI code: "print" dialog -//------------------------------------------------------------------------ - -void XPDFViewer::initPrintDialog() { - Widget sep1, sep2, row, label1, label2, okBtn, cancelBtn; - Arg args[20]; - int n; - XmString s; - GString *psFileName; - - //----- dialog - n = 0; - s = XmStringCreateLocalized(xpdfAppName ": Print"); - XtSetArg(args[n], XmNdialogTitle, s); ++n; - XtSetArg(args[n], XmNdialogStyle, XmDIALOG_PRIMARY_APPLICATION_MODAL); ++n; - printDialog = XmCreateFormDialog(win, "printDialog", args, n); - XmStringFree(s); - - //----- "print with command" - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; - XtSetArg(args[n], XmNset, XmSET); ++n; - s = XmStringCreateLocalized("Print with command:"); - XtSetArg(args[n], XmNlabelString, s); ++n; - printWithCmdBtn = XmCreateToggleButton(printDialog, "printWithCmd", args, n); - XmStringFree(s); - XtManageChild(printWithCmdBtn); - XtAddCallback(printWithCmdBtn, XmNvalueChangedCallback, - &printWithCmdBtnCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printWithCmdBtn); ++n; - XtSetArg(args[n], XmNtopOffset, 2); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 16); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNcolumns, 40); ++n; - printCmdText = XmCreateTextField(printDialog, "printCmd", args, n); - XtManageChild(printCmdText); - - //----- "print to file" - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printCmdText); ++n; - XtSetArg(args[n], XmNtopOffset, 4); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); ++n; - XtSetArg(args[n], XmNset, XmUNSET); ++n; - s = XmStringCreateLocalized("Print to file:"); - XtSetArg(args[n], XmNlabelString, s); ++n; - printToFileBtn = XmCreateToggleButton(printDialog, "printToFile", args, n); - XmStringFree(s); - XtManageChild(printToFileBtn); - XtAddCallback(printToFileBtn, XmNvalueChangedCallback, - &printToFileBtnCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printToFileBtn); ++n; - XtSetArg(args[n], XmNtopOffset, 2); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 16); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNcolumns, 40); ++n; - XtSetArg(args[n], XmNsensitive, False); ++n; - printFileText = XmCreateTextField(printDialog, "printFile", args, n); - XtManageChild(printFileText); - - //----- separator - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, printFileText); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 8); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 8); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - sep1 = XmCreateSeparator(printDialog, "sep1", args, n); - XtManageChild(sep1); - - //----- page range - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep1); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - XtSetArg(args[n], XmNpacking, XmPACK_TIGHT); ++n; - row = XmCreateRowColumn(printDialog, "row", args, n); - XtManageChild(row); - n = 0; - s = XmStringCreateLocalized("Pages:"); - XtSetArg(args[n], XmNlabelString, s); ++n; - label1 = XmCreateLabel(row, "label1", args, n); - XmStringFree(s); - XtManageChild(label1); - n = 0; - XtSetArg(args[n], XmNcolumns, 5); ++n; - printFirstPage = XmCreateTextField(row, "printFirstPage", args, n); - XtManageChild(printFirstPage); - n = 0; - s = XmStringCreateLocalized("to"); - XtSetArg(args[n], XmNlabelString, s); ++n; - label2 = XmCreateLabel(row, "label2", args, n); - XmStringFree(s); - XtManageChild(label2); - n = 0; - XtSetArg(args[n], XmNcolumns, 5); ++n; - printLastPage = XmCreateTextField(row, "printLastPage", args, n); - XtManageChild(printLastPage); - - //----- separator - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, row); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 8); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 8); ++n; - XtSetArg(args[n], XmNorientation, XmHORIZONTAL); ++n; - sep2 = XmCreateSeparator(printDialog, "sep2", args, n); - XtManageChild(sep2); - - //----- "print" and "cancel" buttons - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep2); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNleftOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - okBtn = XmCreatePushButton(printDialog, "Print", args, n); - XtManageChild(okBtn); - XtAddCallback(okBtn, XmNactivateCallback, - &printPrintCbk, (XtPointer)this); - n = 0; - XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); ++n; - XtSetArg(args[n], XmNtopWidget, sep2); ++n; - XtSetArg(args[n], XmNtopOffset, 8); ++n; - XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNrightOffset, 4); ++n; - XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); ++n; - XtSetArg(args[n], XmNbottomOffset, 4); ++n; - cancelBtn = XmCreatePushButton(printDialog, "Cancel", args, n); - XtManageChild(cancelBtn); - n = 0; - XtSetArg(args[n], XmNdefaultButton, okBtn); ++n; - XtSetArg(args[n], XmNcancelButton, cancelBtn); ++n; - XtSetValues(printDialog, args, n); - - //----- initial values - if ((psFileName = globalParams->getPSFile())) { - if (psFileName->getChar(0) == '|') { - XmTextFieldSetString(printCmdText, - psFileName->getCString() + 1); - } else { - XmTextFieldSetString(printFileText, psFileName->getCString()); - } - delete psFileName; - } -} - -void XPDFViewer::setupPrintDialog() { - PDFDoc *doc; - char buf[20]; - GString *pdfFileName, *psFileName, *psFileName2; - char *p; - - doc = core->getDoc(); - psFileName = globalParams->getPSFile(); - if (!psFileName || psFileName->getChar(0) == '|') { - pdfFileName = doc->getFileName(); - p = pdfFileName->getCString() + pdfFileName->getLength() - 4; - if (!strcmp(p, ".pdf") || !strcmp(p, ".PDF")) { - psFileName2 = new GString(pdfFileName->getCString(), - pdfFileName->getLength() - 4); - } else { - psFileName2 = pdfFileName->copy(); - } - psFileName2->append(".ps"); - XmTextFieldSetString(printFileText, psFileName2->getCString()); - delete psFileName2; - } - if (psFileName && psFileName->getChar(0) == '|') { - XmToggleButtonSetState(printWithCmdBtn, True, False); - XmToggleButtonSetState(printToFileBtn, False, False); - XtVaSetValues(printCmdText, XmNsensitive, True, NULL); - XtVaSetValues(printFileText, XmNsensitive, False, NULL); - } else { - XmToggleButtonSetState(printWithCmdBtn, False, False); - XmToggleButtonSetState(printToFileBtn, True, False); - XtVaSetValues(printCmdText, XmNsensitive, False, NULL); - XtVaSetValues(printFileText, XmNsensitive, True, NULL); - } - if (psFileName) { - delete psFileName; - } - - sprintf(buf, "%d", doc->getNumPages()); - XmTextFieldSetString(printFirstPage, "1"); - XmTextFieldSetString(printLastPage, buf); -} - -void XPDFViewer::printWithCmdBtnCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmToggleButtonCallbackStruct *data = - (XmToggleButtonCallbackStruct *)callData; - - if (data->set != XmSET) { - XmToggleButtonSetState(viewer->printWithCmdBtn, True, False); - } - XmToggleButtonSetState(viewer->printToFileBtn, False, False); - XtVaSetValues(viewer->printCmdText, XmNsensitive, True, NULL); - XtVaSetValues(viewer->printFileText, XmNsensitive, False, NULL); -} - -void XPDFViewer::printToFileBtnCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - XmToggleButtonCallbackStruct *data = - (XmToggleButtonCallbackStruct *)callData; - - if (data->set != XmSET) { - XmToggleButtonSetState(viewer->printToFileBtn, True, False); - } - XmToggleButtonSetState(viewer->printWithCmdBtn, False, False); - XtVaSetValues(viewer->printFileText, XmNsensitive, True, NULL); - XtVaSetValues(viewer->printCmdText, XmNsensitive, False, NULL); -} - -void XPDFViewer::printPrintCbk(Widget widget, XtPointer ptr, - XtPointer callData) { - XPDFViewer *viewer = (XPDFViewer *)ptr; - unsigned char withCmd; - GString *psFileName; - int firstPage, lastPage; - PDFDoc *doc; - PSOutputDev *psOut; - - doc = viewer->core->getDoc(); - if (!doc->okToPrint()) { - error(errNotAllowed, -1, "Printing this document is not allowed."); - return; - } - - viewer->core->setBusyCursor(gTrue); - - XtVaGetValues(viewer->printWithCmdBtn, XmNset, &withCmd, NULL); - if (withCmd) { - psFileName = new GString(XmTextFieldGetString(viewer->printCmdText)); - psFileName->insert(0, '|'); - } else { - psFileName = new GString(XmTextFieldGetString(viewer->printFileText)); - } - - firstPage = atoi(XmTextFieldGetString(viewer->printFirstPage)); - lastPage = atoi(XmTextFieldGetString(viewer->printLastPage)); - if (firstPage < 1) { - firstPage = 1; - } else if (firstPage > doc->getNumPages()) { - firstPage = doc->getNumPages(); - } - if (lastPage < firstPage) { - lastPage = firstPage; - } else if (lastPage > doc->getNumPages()) { - lastPage = doc->getNumPages(); - } - - psOut = new PSOutputDev(psFileName->getCString(), doc, - firstPage, lastPage, psModePS); - if (psOut->isOk()) { - doc->displayPages(psOut, firstPage, lastPage, 72, 72, - 0, gTrue, globalParams->getPSCrop(), gTrue); - } - delete psOut; - delete psFileName; - - viewer->core->setBusyCursor(gFalse); -} - -//------------------------------------------------------------------------ -// Motif support -//------------------------------------------------------------------------ - -XmFontList XPDFViewer::createFontList(char *xlfd) { - XmFontList fontList; - -#if XmVersion <= 1001 - - XFontStruct *font; - String params; - Cardinal nParams; - - font = XLoadQueryFont(display, xlfd); - if (font) { - fontList = XmFontListCreate(font, XmSTRING_DEFAULT_CHARSET); - } else { - params = (String)xlfd; - nParams = 1; - XtAppWarningMsg(app->getAppContext(), - "noSuchFont", "CvtStringToXmFontList", - "XtToolkitError", "No such font: %s", - ¶ms, &nParams); - fontList = NULL; - } - -#else - - XmFontListEntry entry; - - entry = XmFontListEntryLoad(display, xlfd, - XmFONT_IS_FONT, XmFONTLIST_DEFAULT_TAG); - fontList = XmFontListAppendEntry(NULL, entry); - XmFontListEntryFree(&entry); - -#endif - - return fontList; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.h b/thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.h deleted file mode 100644 index 12ae000b..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XPDFViewer.h +++ /dev/null @@ -1,355 +0,0 @@ -//======================================================================== -// -// XPDFViewer.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XPDFVIEWER_H -#define XPDFVIEWER_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#define Object XtObject -#include -#undef Object -#include "gtypes.h" -#include "XPDFCore.h" - -#if (XmVERSION <= 1) && !defined(__sgi) -#define DISABLE_OUTLINE -#endif - -#if (XmVERSION >= 2 && !defined(LESSTIF_VERSION)) -# define USE_COMBO_BOX 1 -#else -# undef USE_COMBO_BOX -#endif - -class GString; -class GList; -class UnicodeMap; -class LinkDest; -class XPDFApp; -class XPDFViewer; - -//------------------------------------------------------------------------ - -// NB: this must match the defn of zoomMenuBtnInfo in XPDFViewer.cc -#define nZoomMenuItems 10 - -//------------------------------------------------------------------------ - -struct XPDFViewerCmd { - char *name; - int nArgs; - GBool requiresDoc; - GBool requiresEvent; - void (XPDFViewer::*func)(GString *args[], int nArgs, XEvent *event); -}; - -//------------------------------------------------------------------------ -// XPDFViewer -//------------------------------------------------------------------------ - -class XPDFViewer { -public: - - XPDFViewer(XPDFApp *appA, GString *fileName, - int pageA, GString *destName, GBool fullScreen, - GString *ownerPassword, GString *userPassword); - XPDFViewer(XPDFApp *appA, PDFDoc *doc, int pageA, - GString *destName, GBool fullScreen); - GBool isOk() { return ok; } - ~XPDFViewer(); - - void open(GString *fileName, int pageA, GString *destName); - void clear(); - void reloadFile(); - - void execCmd(GString *cmd, XEvent *event); - - Widget getWindow() { return win; } - -private: - - //----- load / display - GBool loadFile(GString *fileName, GString *ownerPassword = NULL, - GString *userPassword = NULL); - void displayPage(int pageA, double zoomA, int rotateA, - GBool scrollToTop, GBool addToHist); - void displayDest(LinkDest *dest, double zoomA, int rotateA, - GBool addToHist); - void getPageAndDest(int pageA, GString *destName, - int *pageOut, LinkDest **destOut); - - //----- hyperlinks / actions - void doLink(int wx, int wy, GBool onlyIfNoSelection, GBool newWin); - static void actionCbk(void *data, char *action); - - //----- keyboard/mouse input - static void keyPressCbk(void *data, KeySym key, Guint modifiers, - XEvent *event); - static void mouseCbk(void *data, XEvent *event); - int getModifiers(Guint modifiers); - int getContext(Guint modifiers); - - //----- command functions - void cmdAbout(GString *args[], int nArgs, XEvent *event); - void cmdCloseOutline(GString *args[], int nArgs, XEvent *event); - void cmdCloseWindow(GString *args[], int nArgs, XEvent *event); - void cmdContinuousMode(GString *args[], int nArgs, XEvent *event); - void cmdEndPan(GString *args[], int nArgs, XEvent *event); - void cmdEndSelection(GString *args[], int nArgs, XEvent *event); - void cmdFind(GString *args[], int nArgs, XEvent *event); - void cmdFindNext(GString *args[], int nArgs, XEvent *event); - void cmdFocusToDocWin(GString *args[], int nArgs, XEvent *event); - void cmdFocusToPageNum(GString *args[], int nArgs, XEvent *event); - void cmdFollowLink(GString *args[], int nArgs, XEvent *event); - void cmdFollowLinkInNewWin(GString *args[], int nArgs, XEvent *event); - void cmdFollowLinkInNewWinNoSel(GString *args[], int nArgs, XEvent *event); - void cmdFollowLinkNoSel(GString *args[], int nArgs, XEvent *event); - void cmdFullScreenMode(GString *args[], int nArgs, XEvent *event); - void cmdGoBackward(GString *args[], int nArgs, XEvent *event); - void cmdGoForward(GString *args[], int nArgs, XEvent *event); - void cmdGotoDest(GString *args[], int nArgs, XEvent *event); - void cmdGotoLastPage(GString *args[], int nArgs, XEvent *event); - void cmdGotoLastPageNoScroll(GString *args[], int nArgs, XEvent *event); - void cmdGotoPage(GString *args[], int nArgs, XEvent *event); - void cmdGotoPageNoScroll(GString *args[], int nArgs, XEvent *event); - void cmdNextPage(GString *args[], int nArgs, XEvent *event); - void cmdNextPageNoScroll(GString *args[], int nArgs, XEvent *event); - void cmdOpen(GString *args[], int nArgs, XEvent *event); - void cmdOpenFile(GString *args[], int nArgs, XEvent *event); - void cmdOpenFileAtDest(GString *args[], int nArgs, XEvent *event); - void cmdOpenFileAtDestInNewWin(GString *args[], int nArgs, XEvent *event); - void cmdOpenFileAtPage(GString *args[], int nArgs, XEvent *event); - void cmdOpenFileAtPageInNewWin(GString *args[], int nArgs, XEvent *event); - void cmdOpenFileInNewWin(GString *args[], int nArgs, XEvent *event); - void cmdOpenInNewWin(GString *args[], int nArgs, XEvent *event); - void cmdOpenOutline(GString *args[], int nArgs, XEvent *event); - void cmdPageDown(GString *args[], int nArgs, XEvent *event); - void cmdPageUp(GString *args[], int nArgs, XEvent *event); - void cmdPostPopupMenu(GString *args[], int nArgs, XEvent *event); - void cmdPrevPage(GString *args[], int nArgs, XEvent *event); - void cmdPrevPageNoScroll(GString *args[], int nArgs, XEvent *event); - void cmdPrint(GString *args[], int nArgs, XEvent *event); - void cmdQuit(GString *args[], int nArgs, XEvent *event); - void cmdRaise(GString *args[], int nArgs, XEvent *event); - void cmdRedraw(GString *args[], int nArgs, XEvent *event); - void cmdReload(GString *args[], int nArgs, XEvent *event); - void cmdRotateCCW(GString *args[], int nArgs, XEvent *event); - void cmdRotateCW(GString *args[], int nArgs, XEvent *event); - void cmdRun(GString *args[], int nArgs, XEvent *event); - void cmdScrollDown(GString *args[], int nArgs, XEvent *event); - void cmdScrollDownNextPage(GString *args[], int nArgs, XEvent *event); - void cmdScrollLeft(GString *args[], int nArgs, XEvent *event); - void cmdScrollOutlineDown(GString *args[], int nArgs, XEvent *event); - void cmdScrollOutlineUp(GString *args[], int nArgs, XEvent *event); - void cmdScrollRight(GString *args[], int nArgs, XEvent *event); - void cmdScrollToBottomEdge(GString *args[], int nArgs, XEvent *event); - void cmdScrollToBottomRight(GString *args[], int nArgs, XEvent *event); - void cmdScrollToLeftEdge(GString *args[], int nArgs, XEvent *event); - void cmdScrollToRightEdge(GString *args[], int nArgs, XEvent *event); - void cmdScrollToTopEdge(GString *args[], int nArgs, XEvent *event); - void cmdScrollToTopLeft(GString *args[], int nArgs, XEvent *event); - void cmdScrollUp(GString *args[], int nArgs, XEvent *event); - void cmdScrollUpPrevPage(GString *args[], int nArgs, XEvent *event); - void cmdSetSelection(GString *args[], int nArgs, XEvent *event); - void cmdSinglePageMode(GString *args[], int nArgs, XEvent *event); - void cmdStartPan(GString *args[], int nArgs, XEvent *event); - void cmdStartSelection(GString *args[], int nArgs, XEvent *event); - void cmdToggleContinuousMode(GString *args[], int nArgs, XEvent *event); - void cmdToggleFullScreenMode(GString *args[], int nArgs, XEvent *event); - void cmdToggleOutline(GString *args[], int nArgs, XEvent *event); - void cmdWindowMode(GString *args[], int nArgs, XEvent *event); - void cmdZoomFitPage(GString *args[], int nArgs, XEvent *event); - void cmdZoomFitWidth(GString *args[], int nArgs, XEvent *event); - void cmdZoomIn(GString *args[], int nArgs, XEvent *event); - void cmdZoomOut(GString *args[], int nArgs, XEvent *event); - void cmdZoomPercent(GString *args[], int nArgs, XEvent *event); - void cmdZoomToSelection(GString *args[], int nArgs, XEvent *event); - - //----- GUI code: main window - void initWindow(GBool fullScreen); - void initToolbar(Widget parent); -#ifndef DISABLE_OUTLINE - void initPanedWin(Widget parent); -#endif - void initCore(Widget parent, GBool fullScreen); - void initPopupMenu(); - void addToolTip(Widget widget, char *text); - void mapWindow(); - void closeWindow(); - int getZoomIdx(); - void setZoomIdx(int idx); - void setZoomVal(double z); - static void prevPageCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void prevTenPageCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void nextPageCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void nextTenPageCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void backCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void forwardCbk(Widget widget, XtPointer ptr, - XtPointer callData); -#if USE_COMBO_BOX - static void zoomComboBoxCbk(Widget widget, XtPointer ptr, - XtPointer callData); -#else - static void zoomMenuCbk(Widget widget, XtPointer ptr, - XtPointer callData); -#endif - static void findCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void printCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void aboutCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void quitCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void openCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void openInNewWindowCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void reloadCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void saveAsCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void continuousModeToggleCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void fullScreenToggleCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void rotateCCWCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void rotateCWCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void zoomToSelectionCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void closeCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void closeMsgCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void pageNumCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void updateCbk(void *data, GString *fileName, - int pageNum, int numPages, char *linkString); - - //----- GUI code: outline -#ifndef DISABLE_OUTLINE - void setupOutline(); - void setupOutlineItems(GList *items, Widget parent, UnicodeMap *uMap); - static void outlineSelectCbk(Widget widget, XtPointer ptr, - XtPointer callData); -#endif - - //----- GUI code: "about" dialog - void initAboutDialog(); - - //----- GUI code: "open" dialog - void initOpenDialog(); - void mapOpenDialog(GBool openInNewWindowA); - static void openOkCbk(Widget widget, XtPointer ptr, - XtPointer callData); - - //----- GUI code: "find" dialog - void initFindDialog(); - static void findFindCbk(Widget widget, XtPointer ptr, - XtPointer callData); - void mapFindDialog(); - void doFind(GBool next); - static void findCloseCbk(Widget widget, XtPointer ptr, - XtPointer callData); - - //----- GUI code: "save as" dialog - void initSaveAsDialog(); - void mapSaveAsDialog(); - static void saveAsOkCbk(Widget widget, XtPointer ptr, - XtPointer callData); - - //----- GUI code: "print" dialog - void initPrintDialog(); - void setupPrintDialog(); - static void printWithCmdBtnCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void printToFileBtnCbk(Widget widget, XtPointer ptr, - XtPointer callData); - static void printPrintCbk(Widget widget, XtPointer ptr, - XtPointer callData); - - //----- Motif support - XmFontList createFontList(char *xlfd); - - static XPDFViewerCmd cmdTab[]; - - XPDFApp *app; - GBool ok; - - Display *display; - int screenNum; - Widget win; // top-level window - Widget form; - Widget panedWin; -#ifndef DISABLE_OUTLINE - Widget outlineScroll; - Widget outlineTree; - Widget *outlineLabels; - int outlineLabelsLength; - int outlineLabelsSize; - Dimension outlinePaneWidth; -#endif - XPDFCore *core; - Widget toolBar; - Widget backBtn; - Widget prevTenPageBtn; - Widget prevPageBtn; - Widget nextPageBtn; - Widget nextTenPageBtn; - Widget forwardBtn; - Widget pageNumText; - Widget pageCountLabel; -#if USE_COMBO_BOX - Widget zoomComboBox; -#else - Widget zoomMenu; - Widget zoomMenuBtns[nZoomMenuItems]; -#endif - Widget zoomWidget; - Widget findBtn; - Widget printBtn; - Widget aboutBtn; - Widget linkLabel; - Widget quitBtn; - Widget popupMenu; - - Widget aboutDialog; - XmFontList aboutBigFont, aboutVersionFont, aboutFixedFont; - - Widget openDialog; - GBool openInNewWindow; - - Widget findDialog; - Widget findText; - Widget findBackwardToggle; - Widget findCaseSensitiveToggle; - - Widget saveAsDialog; - - Widget printDialog; - Widget printWithCmdBtn; - Widget printToFileBtn; - Widget printCmdText; - Widget printFileText; - Widget printFirstPage; - Widget printLastPage; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XRef.cc b/thirdparty/xpdf/3.02/src/xpdf/XRef.cc deleted file mode 100644 index 7931107d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XRef.cc +++ /dev/null @@ -1,946 +0,0 @@ -//======================================================================== -// -// XRef.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#include "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" - -//------------------------------------------------------------------------ - -#define xrefSearchSize 1024 // read this many bytes at end of file - // to look for 'startxref' - -//------------------------------------------------------------------------ -// Permission bits -//------------------------------------------------------------------------ - -#define permPrint (1<<2) -#define permChange (1<<3) -#define permCopy (1<<4) -#define permNotes (1<<5) -#define defPermFlags 0xfffc - -//------------------------------------------------------------------------ -// ObjectStream -//------------------------------------------------------------------------ - -class ObjectStream { -public: - - // Create an object stream, using object number , - // 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 th object from this stream, which should be - // object number , 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; -}; - -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(errSyntaxError, -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, gTrue); - parser->getObj(&obj2, gTrue); - 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 -//------------------------------------------------------------------------ - -XRef::XRef(BaseStream *strA) { - Guint pos; - Object obj; - - ok = gTrue; - errCode = errNone; - size = 0; - last = -1; - entries = NULL; - streamEnds = NULL; - streamEndsLen = 0; - objStr = NULL; - - encrypted = gFalse; - permFlags = defPermFlags; - ownerPasswordOk = gFalse; - - // read the trailer - str = strA; - start = str->getStart(); - pos = getStartXref(); - - // if there was a problem with the 'startxref' position, try to - // reconstruct the xref table - if (pos == 0) { - if (!(ok = constructXRef())) { - errCode = errDamaged; - return; - } - - // read the xref table - } else { - while (readXRef(&pos)) ; - - // if there was a problem with the xref table, - // try to reconstruct it - if (!ok) { - if (!(ok = constructXRef())) { - errCode = errDamaged; - return; - } - } - } - - // 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())) { - 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() { - gfree(entries); - trailerDict.free(); - if (streamEnds) { - gfree(streamEnds); - } - if (objStr) { - delete objStr; - } -} - -// Read the 'startxref' position. -Guint XRef::getStartXref() { - 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) { - return 0; - } - for (p = &buf[i+9]; isspace(*p); ++p) ; - lastXRefPos = strToUnsigned(p); - - return lastXRefPos; -} - -// Read one xref table section. Also reads the associated trailer -// dictionary, and returns the prev pointer (if any). -GBool XRef::readXRef(Guint *pos) { - 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, gTrue); - - // parse an old-style xref table - if (obj.isCmd("xref")) { - obj.free(); - more = readXRefTable(parser, pos); - - // parse an xref stream - } else if (obj.isInt()) { - obj.free(); - if (!parser->getObj(&obj, gTrue)->isInt()) { - goto err1; - } - obj.free(); - if (!parser->getObj(&obj, gTrue)->isCmd("obj")) { - goto err1; - } - obj.free(); - if (!parser->getObj(&obj)->isStream()) { - goto err1; - } - 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) { - XRefEntry entry; - GBool more; - Object obj, obj2; - Guint pos2; - int first, n, newSize, i; - - while (1) { - parser->getObj(&obj, gTrue); - if (obj.isCmd("trailer")) { - obj.free(); - break; - } - if (!obj.isInt()) { - goto err1; - } - first = obj.getInt(); - obj.free(); - if (!parser->getObj(&obj, gTrue)->isInt()) { - goto err1; - } - n = obj.getInt(); - obj.free(); - if (first < 0 || n < 0 || first + n < 0) { - goto err1; - } - if (first + n > size) { - for (newSize = size ? 2 * size : 1024; - first + n > newSize && newSize > 0; - newSize <<= 1) ; - if (newSize < 0) { - goto err1; - } - entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry)); - for (i = size; i < newSize; ++i) { - entries[i].offset = 0xffffffff; - entries[i].type = xrefEntryFree; - } - size = newSize; - } - for (i = first; i < first + n; ++i) { - if (!parser->getObj(&obj, gTrue)->isInt()) { - goto err1; - } - entry.offset = (Guint)obj.getInt(); - obj.free(); - if (!parser->getObj(&obj, gTrue)->isInt()) { - goto err1; - } - entry.gen = obj.getInt(); - obj.free(); - parser->getObj(&obj, gTrue); - 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; - } - if (i > last) { - last = i; - } - } - } - } - - // read the trailer dictionary - if (!parser->getObj(&obj)->isDict()) { - goto err1; - } - - // get the 'Prev' pointer - obj.getDict()->lookupNF("Prev", &obj2); - if (obj2.isInt()) { - pos2 = (Guint)obj2.getInt(); - if (pos2 != *pos) { - *pos = pos2; - more = gTrue; - } else { - error(errSyntaxWarning, -1, "Infinite loop in xref table"); - more = gFalse; - } - } else if (obj2.isRef()) { - // certain buggy PDF generators generate "/Prev NNN 0 R" instead - // of "/Prev NNN" - pos2 = (Guint)obj2.getRefNum(); - if (pos2 != *pos) { - *pos = pos2; - more = gTrue; - } else { - error(errSyntaxWarning, -1, "Infinite loop in xref table"); - more = gFalse; - } - } 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(); - readXRef(&pos2); - if (!ok) { - obj2.free(); - goto err1; - } - } - obj2.free(); - - obj.free(); - return more; - - err1: - obj.free(); - 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) { - entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry)); - for (i = size; i < newSize; ++i) { - entries[i].offset = 0xffffffff; - entries[i].type = xrefEntryFree; - } - size = newSize; - } - - 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, newSize, i, j; - - if (first + n < 0) { - return gFalse; - } - if (first + n > size) { - for (newSize = size ? 2 * size : 1024; - first + n > newSize && newSize > 0; - newSize <<= 1) ; - if (newSize < 0) { - return gFalse; - } - entries = (XRefEntry *)greallocn(entries, newSize, sizeof(XRefEntry)); - for (i = size; i < newSize; ++i) { - entries[i].offset = 0xffffffff; - entries[i].type = xrefEntryFree; - } - size = newSize; - } - 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; - } - if (i > last) { - last = i; - } - } - } - - return gTrue; -} - -// Attempt to construct an xref table for a damaged file. -GBool XRef::constructXRef() { - Parser *parser; - Object newTrailerDict, obj; - char buf[256]; - Guint pos; - int num, gen; - int newSize; - int streamEndsSize; - char *p; - int i; - GBool gotRoot; - - gfree(entries); - size = 0; - entries = NULL; - - error(errSyntaxWarning, -1, - "PDF file is damaged - attempting to reconstruct xref table..."); - gotRoot = gFalse; - streamEndsLen = streamEndsSize = 0; - - str->reset(); - while (1) { - pos = str->getPos(); - if (!str->getLine(buf, 256)) { - break; - } - p = buf; - - // skip whitespace - while (*p && Lexer::isSpace(*p & 0xff)) ++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(errSyntaxError, -1, "Bad object number"); - return gFalse; - } - entries = (XRefEntry *) - greallocn(entries, newSize, sizeof(XRefEntry)); - for (i = size; i < newSize; ++i) { - entries[i].offset = 0xffffffff; - entries[i].type = xrefEntryFree; - } - size = newSize; - } - if (entries[num].type == xrefEntryFree || - gen >= entries[num].gen) { - entries[num].offset = pos - start; - entries[num].gen = gen; - entries[num].type = xrefEntryUncompressed; - if (num > last) { - last = num; - } - } - } - } - } - } - } - - } else if (!strncmp(p, "endstream", 9)) { - if (streamEndsLen == streamEndsSize) { - streamEndsSize += 64; - streamEnds = (Guint *)greallocn(streamEnds, - streamEndsSize, sizeof(int)); - } - streamEnds[streamEndsLen++] = pos; - } - } - - if (gotRoot) - return gTrue; - - error(errSyntaxError, -1, "Couldn't find trailer dictionary"); - return gFalse; -} - -void XRef::setEncryption(int permFlagsA, GBool ownerPasswordOkA, - Guchar *fileKeyA, int keyLengthA, int encVersionA, - 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; - encAlgorithm = encAlgorithmA; -} - -GBool XRef::okToPrint(GBool ignoreOwnerPW) { - return (!ignoreOwnerPW && ownerPasswordOk) || (permFlags & permPrint); -} - -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); -} - -Object *XRef::fetch(int num, int gen, Object *obj, int recursion) { - XRefEntry *e; - Parser *parser; - Object obj1, obj2, obj3; - - // check for bogus ref - this can happen in corrupted PDF files - if (num < 0 || num >= size) { - goto err; - } - - e = &entries[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, gTrue); - parser->getObj(&obj2, gTrue); - parser->getObj(&obj3, gTrue); - if (!obj1.isInt() || obj1.getInt() != num || - !obj2.isInt() || obj2.getInt() != gen || - !obj3.isCmd("obj")) { - obj1.free(); - obj2.free(); - obj3.free(); - delete parser; - goto err; - } - parser->getObj(obj, gFalse, encrypted ? fileKey : (Guchar *)NULL, - encAlgorithm, keyLength, num, gen, recursion); - obj1.free(); - obj2.free(); - obj3.free(); - delete parser; - break; - - case xrefEntryCompressed: -#if 0 // Adobe apparently ignores the generation number on compressed objects - if (gen != 0) { - goto err; - } -#endif - if (e->offset >= (Guint)size || - entries[e->offset].type != xrefEntryUncompressed) { - error(errSyntaxError, -1, "Invalid object stream"); - goto err; - } - if (!objStr || objStr->getObjStrNum() != (int)e->offset) { - if (objStr) { - delete objStr; - } - objStr = new ObjectStream(this, e->offset); - if (!objStr->isOk()) { - delete objStr; - objStr = NULL; - goto err; - } - } - objStr->getObject(e->gen, num, obj); - break; - - default: - goto err; - } - - return obj; - - err: - 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; -} - -Guint XRef::strToUnsigned(char *s) { - Guint x, d; - char *p; - - x = 0; - for (p = s; *p && isdigit(*p); ++p) { - d = *p - '0'; - if (x > (UINT_MAX - d) / 10) { - break; - } - x = 10 * x + d; - } - return x; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/XRef.h b/thirdparty/xpdf/3.02/src/xpdf/XRef.h deleted file mode 100644 index 5f5a329b..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XRef.h +++ /dev/null @@ -1,134 +0,0 @@ -//======================================================================== -// -// XRef.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef XREF_H -#define XREF_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" - -class Dict; -class Stream; -class Parser; -class ObjectStream; - -//------------------------------------------------------------------------ -// XRef -//------------------------------------------------------------------------ - -enum XRefEntryType { - xrefEntryFree, - xrefEntryUncompressed, - xrefEntryCompressed -}; - -struct XRefEntry { - Guint offset; - int gen; - XRefEntryType type; -}; - -class XRef { -public: - - // Constructor. Read xref table from stream. - XRef(BaseStream *strA); - - // 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, - CryptAlgorithm encAlgorithmA); - - // Is the file encrypted? - GBool isEncrypted() { return encrypted; } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse); - GBool okToChange(GBool ignoreOwnerPW = gFalse); - GBool okToCopy(GBool ignoreOwnerPW = gFalse); - GBool okToAddNotes(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, int recursion = 0); - - // 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 last + 1; } - - // Return the offset of the last xref table. - Guint getLastXRefPos() { return lastXRefPos; } - - // 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); - - // Direct access. - int getSize() { return size; } - XRefEntry *getEntry(int i) { return &entries[i]; } - Object *getTrailerDict() { return &trailerDict; } - -private: - - BaseStream *str; // input stream - Guint start; // offset in file (to allow for garbage - // at beginning of file) - XRefEntry *entries; // xref entries - int size; // size of array - int last; // last used index in - int rootNum, rootGen; // catalog dict - GBool ok; // true if xref table is valid - int errCode; // error code (if is false) - Object trailerDict; // trailer dictionary - Guint lastXRefPos; // offset of last xref table - Guint *streamEnds; // 'endstream' positions - only used in - // damaged files - int streamEndsLen; // number of valid entries in streamEnds - ObjectStream *objStr; // cached object stream - GBool encrypted; // true if file is encrypted - int permFlags; // permission bits - GBool ownerPasswordOk; // true if owner password is correct - Guchar fileKey[16]; // file decryption key - int keyLength; // length of key, in bytes - int encVersion; // encryption version - CryptAlgorithm encAlgorithm; // encryption algorithm - - Guint getStartXref(); - GBool readXRef(Guint *pos); - GBool readXRefTable(Parser *parser, Guint *pos); - GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n); - GBool readXRefStream(Stream *xrefStr, Guint *pos); - GBool constructXRef(); - Guint strToUnsigned(char *s); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.cc b/thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.cc deleted file mode 100644 index 4c515372..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.cc +++ /dev/null @@ -1,262 +0,0 @@ -//======================================================================== -// -// XpdfPluginAPI.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include "aconf.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)->getCore())) { - return NULL; - } - return core->getDrawFrame(); -} - -#else - -Widget _xpdfXGetWindow(XpdfDoc doc) { - XPDFCore *core; - - if (!(core = (XPDFCore *)((PDFDoc *)doc)->getCore())) { - 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/thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.h b/thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.h deleted file mode 100644 index 22540f72..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/XpdfPluginAPI.h +++ /dev/null @@ -1,341 +0,0 @@ -/* - * XpdfPluginAPI.h - * - * Copyright 2004 Glyph & Cog, LLC - */ - -#ifndef XPDFPLUGINAPI_H -#define XPDFPLUGINAPI_H - -#ifdef _WIN32 -#include -#else -#define Object XtObject -#include -#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 - * argument. - */ - void *handlerData; - - /* - * Allocate and initialize data for a new document. XpdfViewer will - * pass the returned pointer to all other handler functions as the - * 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/thirdparty/xpdf/3.02/src/xpdf/about-text.h b/thirdparty/xpdf/3.02/src/xpdf/about-text.h deleted file mode 100644 index 50266bd1..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/about-text.h +++ /dev/null @@ -1,48 +0,0 @@ -//======================================================================== -// -// about-text.h -// -// Copyright 2002-2007 Glyph & Cog, LLC -// -//======================================================================== - -static char *aboutWinText[] = { - "http://www.foolabs.com/xpdf/", - "derekn@foolabs.com", - " ", - "Licensed under the GNU General Public License (GPL).", - "See the 'COPYING' file for details.", - " ", - "Supports PDF version " supportedPDFVersionStr ".", - " ", - "The PDF data structures, operators, and specification", - "are copyright 1985-2006 Adobe Systems Inc.", - " ", - "Mouse bindings:", - " button 1: select text / follow link", - " button 2: pan window", - " button 3: menu", - " ", - "Key bindings:", - " o = open file", - " r = reload", - " f / ctrl-F = find text", - " ctrl-G = find next", - " ctrl-P = print", - " n = next page", - " p = previous page", - " = = scroll down", - " = = = scroll up", - " v = forward (history path)", - " b = backward (history path)", - " 0 / + / - = zoom zero / in / out", - " z / w = zoom page / page width", - " alt-F = toggle full-screen mode", - " ctrl-L = redraw", - " q = quit", - " / = top / bottom of page", - " = scroll", - " ", - "For more information, please read the xpdf(1) man page.", - NULL -}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/about.xbm b/thirdparty/xpdf/3.02/src/xpdf/about.xbm deleted file mode 100644 index 86f84720..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/about.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define about_width 10 -#define about_height 15 -static unsigned char about_bits[] = { - 0x78, 0x00, 0xfc, 0x00, 0xce, 0x01, 0x86, 0x01, 0x80, 0x01, 0x80, 0x01, - 0xc0, 0x01, 0xe0, 0x00, 0x70, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, - 0x00, 0x00, 0x30, 0x00, 0x30, 0x00}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/backArrow.xbm b/thirdparty/xpdf/3.02/src/xpdf/backArrow.xbm deleted file mode 100644 index 47f49e19..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/backArrow.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define backArrow_width 16 -#define backArrow_height 15 -static unsigned char backArrow_bits[] = { - 0x80, 0x00, 0xc0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf8, 0x00, 0xfc, 0xcc, - 0xfe, 0xcc, 0xff, 0xcc, 0xfe, 0xcc, 0xfc, 0xcc, 0xf8, 0xcc, 0xf0, 0x00, - 0xe0, 0x00, 0xc0, 0x00, 0x80, 0x00}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/backArrowDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/backArrowDis.xbm deleted file mode 100644 index 75296396..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/backArrowDis.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define backArrowDis_width 16 -#define backArrowDis_height 15 -static unsigned char backArrowDis_bits[] = { - 0x80, 0x00, 0x40, 0x00, 0xa0, 0x00, 0x50, 0x00, 0xa8, 0x00, 0x54, 0x44, - 0xaa, 0x88, 0x55, 0x44, 0xaa, 0x88, 0x54, 0x44, 0xa8, 0x88, 0x50, 0x00, - 0xa0, 0x00, 0x40, 0x00, 0x80, 0x00}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/config.h b/thirdparty/xpdf/3.02/src/xpdf/config.h deleted file mode 100644 index 08f93b86..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/config.h +++ /dev/null @@ -1,106 +0,0 @@ -//======================================================================== -// -// config.h -// -// Copyright 1996-2009 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CONFIG_H -#define CONFIG_H - -//------------------------------------------------------------------------ -// version -//------------------------------------------------------------------------ - -// xpdf version -#define xpdfVersion "3.02.27" -#define xpdfVersionNum 3.02 -#define xpdfMajorVersion 3 -#define xpdfMinorVersion 2 -#define xpdfUpdateVersion 27 -#define xpdfMajorVersionStr "3" -#define xpdfMinorVersionStr "2" -#define xpdfUpdateVersionStr "27" - -// supported PDF version -#define supportedPDFVersionStr "1.7" -#define supportedPDFVersionNum 1.7 - -// copyright notice -#define xpdfCopyright "Copyright 1996-2009 Glyph & Cog, LLC" - -// Windows resource file stuff -#define winxpdfVersion "WinXpdf 3.02.27" -#define xpdfCopyrightAmp "Copyright 1996-2009 Glyph && Cog, LLC" - -//------------------------------------------------------------------------ -// paper size -//------------------------------------------------------------------------ - -// default paper size (in points) for PostScript output -#ifdef A4_PAPER -#define defPaperWidth 595 // ISO A4 (210x297 mm) -#define defPaperHeight 842 -#else -#define defPaperWidth 612 // American letter (8.5x11") -#define defPaperHeight 792 -#endif - -//------------------------------------------------------------------------ -// config file (xpdfrc) path -//------------------------------------------------------------------------ - -// user config file name, relative to the user's home directory -#if defined(VMS) || defined(WIN32) -#define xpdfUserConfigFile "xpdfrc" -#else -#define xpdfUserConfigFile ".xpdfrc" -#endif - -// system config file name (set via the configure script) -#ifdef SYSTEM_XPDFRC -#define xpdfSysConfigFile SYSTEM_XPDFRC -#else -// under Windows, we get the directory with the executable and then -// append this file name -#define xpdfSysConfigFile "xpdfrc" -#endif - -//------------------------------------------------------------------------ -// X-related constants -//------------------------------------------------------------------------ - -// default maximum size of color cube to allocate -#define defaultRGBCube 5 - -//------------------------------------------------------------------------ -// 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 -//------------------------------------------------------------------------ - -#ifdef CDECL -#undef CDECL -#endif - -#if defined(_MSC_VER) || defined(__BORLANDC__) -#define CDECL __cdecl -#else -#define CDECL -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/dblLeftArrow.xbm b/thirdparty/xpdf/3.02/src/xpdf/dblLeftArrow.xbm deleted file mode 100644 index 616d2bd3..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/dblLeftArrow.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define dblLeftArrow_width 16 -#define dblLeftArrow_height 15 -static unsigned char dblLeftArrow_bits[] = { - 0x80, 0x80, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xfc, 0xfc, - 0xfe, 0xfe, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, - 0xe0, 0xe0, 0xc0, 0xc0, 0x80, 0x80}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/dblLeftArrowDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/dblLeftArrowDis.xbm deleted file mode 100644 index 3fb78d80..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/dblLeftArrowDis.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define dblLeftArrowDis_width 16 -#define dblLeftArrowDis_height 15 -static unsigned char dblLeftArrowDis_bits[] = { - 0x80, 0x80, 0x40, 0x40, 0xa0, 0xa0, 0x50, 0x50, 0xa8, 0xa8, 0x54, 0x54, - 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x54, 0x54, 0xa8, 0xa8, 0x50, 0x50, - 0xa0, 0xa0, 0x40, 0x40, 0x80, 0x80}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/dblRightArrow.xbm b/thirdparty/xpdf/3.02/src/xpdf/dblRightArrow.xbm deleted file mode 100644 index 0072810e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/dblRightArrow.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define dblRightArrow_width 16 -#define dblRightArrow_height 15 -static unsigned char dblRightArrow_bits[] = { - 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f, 0x3f, - 0x7f, 0x7f, 0xff, 0xff, 0x7f, 0x7f, 0x3f, 0x3f, 0x1f, 0x1f, 0x0f, 0x0f, - 0x07, 0x07, 0x03, 0x03, 0x01, 0x01}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/dblRightArrowDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/dblRightArrowDis.xbm deleted file mode 100644 index a6c1e370..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/dblRightArrowDis.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define dblRightArrowDis_width 16 -#define dblRightArrowDis_height 15 -static unsigned char dblRightArrowDis_bits[] = { - 0x01, 0x01, 0x02, 0x02, 0x05, 0x05, 0x0a, 0x0a, 0x15, 0x15, 0x2a, 0x2a, - 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0x2a, 0x2a, 0x15, 0x15, 0x0a, 0x0a, - 0x05, 0x05, 0x02, 0x02, 0x01, 0x01}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/find.xbm b/thirdparty/xpdf/3.02/src/xpdf/find.xbm deleted file mode 100644 index 206da875..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/find.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define find_width 15 -#define find_height 15 -static unsigned char find_bits[] = { - 0x38, 0x0e, 0x28, 0x0a, 0x2e, 0x3a, 0xfe, 0x3f, 0x7f, 0x7f, 0x61, 0x43, - 0x61, 0x43, 0x61, 0x43, 0x61, 0x43, 0xe1, 0x43, 0x21, 0x42, 0x21, 0x42, - 0x21, 0x42, 0x21, 0x42, 0x3f, 0x7e}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/findDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/findDis.xbm deleted file mode 100644 index cf666f24..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/findDis.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define findDis_width 15 -#define findDis_height 15 -static unsigned char findDis_bits[] = { - 0x10, 0x04, 0x28, 0x0a, 0x04, 0x10, 0xaa, 0x2a, 0x55, 0x55, 0x20, 0x02, - 0x41, 0x41, 0x20, 0x02, 0x41, 0x41, 0xa0, 0x02, 0x01, 0x40, 0x20, 0x02, - 0x01, 0x40, 0x20, 0x02, 0x15, 0x54}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/forwardArrow.xbm b/thirdparty/xpdf/3.02/src/xpdf/forwardArrow.xbm deleted file mode 100644 index e3875352..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/forwardArrow.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define forwardArrow_width 16 -#define forwardArrow_height 15 -static unsigned char forwardArrow_bits[] = { - 0x00, 0x01, 0x00, 0x03, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x1f, 0x33, 0x3f, - 0x33, 0x7f, 0x33, 0xff, 0x33, 0x7f, 0x33, 0x3f, 0x00, 0x1f, 0x00, 0x0f, - 0x00, 0x07, 0x00, 0x03, 0x00, 0x01}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/forwardArrowDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/forwardArrowDis.xbm deleted file mode 100644 index 58d0cc0f..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/forwardArrowDis.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define forwardArrowDis_width 16 -#define forwardArrowDis_height 15 -static unsigned char forwardArrowDis_bits[] = { - 0x00, 0x01, 0x00, 0x02, 0x00, 0x05, 0x00, 0x0a, 0x00, 0x15, 0x22, 0x2a, - 0x11, 0x55, 0x22, 0xaa, 0x11, 0x55, 0x22, 0x2a, 0x00, 0x15, 0x00, 0x0a, - 0x00, 0x05, 0x00, 0x02, 0x00, 0x01}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/leftArrow.xbm b/thirdparty/xpdf/3.02/src/xpdf/leftArrow.xbm deleted file mode 100644 index 367e4e60..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/leftArrow.xbm +++ /dev/null @@ -1,5 +0,0 @@ -#define leftArrow_width 8 -#define leftArrow_height 15 -static unsigned char leftArrow_bits[] = { - 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xfe, 0xfc, 0xf8, 0xf0, - 0xe0, 0xc0, 0x80}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/leftArrowDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/leftArrowDis.xbm deleted file mode 100644 index 953092a6..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/leftArrowDis.xbm +++ /dev/null @@ -1,5 +0,0 @@ -#define leftArrowDis_width 8 -#define leftArrowDis_height 15 -static unsigned char leftArrowDis_bits[] = { - 0x80, 0x40, 0xa0, 0x50, 0xa8, 0x54, 0xaa, 0x55, 0xaa, 0x54, 0xa8, 0x50, - 0xa0, 0x40, 0x80}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/pdffonts.cc b/thirdparty/xpdf/3.02/src/xpdf/pdffonts.cc deleted file mode 100644 index 73fc9a81..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/pdffonts.cc +++ /dev/null @@ -1,303 +0,0 @@ -//======================================================================== -// -// pdffonts.cc -// -// Copyright 2001-2007 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include -#include -#include -#include -#include -#include "parseargs.h" -#include "GString.h" -#include "gmem.h" -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "Dict.h" -#include "GfxFont.h" -#include "Annot.h" -#include "PDFDoc.h" -#include "config.h" - -// NB: this must match the definition of GfxFontType in GfxFont.h. -static char *fontTypeNames[] = { - "unknown", - "Type 1", - "Type 1C", - "Type 1C (OT)", - "Type 3", - "TrueType", - "TrueType (OT)", - "CID Type 0", - "CID Type 0C", - "CID Type 0C (OT)", - "CID TrueType", - "CID TrueType (OT)" -}; - -static void scanFonts(Dict *resDict, PDFDoc *doc); -static void scanFont(GfxFont *font, PDFDoc *doc); - -static int firstPage = 1; -static int lastPage = 0; -static char ownerPassword[33] = "\001"; -static char userPassword[33] = "\001"; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, - "first page to examine"}, - {"-l", argInt, &lastPage, 0, - "last page to examine"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -static Ref *fonts; -static int fontsLen; -static int fontsSize; - -int main(int argc, char *argv[]) { - PDFDoc *doc; - GString *fileName; - GString *ownerPW, *userPW; - GBool ok; - Page *page; - Dict *resDict; - Annots *annots; - Object obj1, obj2; - int pg, i; - int exitCode; - - exitCode = 99; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc != 2 || printVersion || printHelp) { - fprintf(stderr, "pdffonts version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("pdffonts", "", argDesc); - } - goto err0; - } - fileName = new GString(argv[1]); - - // read config file - globalParams = new GlobalParams(cfgFileName); - - // open PDF file - if (ownerPassword[0] != '\001') { - ownerPW = new GString(ownerPassword); - } else { - ownerPW = NULL; - } - if (userPassword[0] != '\001') { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, ownerPW, userPW); - if (userPW) { - delete userPW; - } - if (ownerPW) { - delete ownerPW; - } - if (!doc->isOk()) { - exitCode = 1; - goto err1; - } - - // get page range - if (firstPage < 1) { - firstPage = 1; - } - if (lastPage < 1 || lastPage > doc->getNumPages()) { - lastPage = doc->getNumPages(); - } - - // scan the fonts - printf("name type emb sub uni object ID\n"); - printf("------------------------------------ ----------------- --- --- --- ---------\n"); - fonts = NULL; - fontsLen = fontsSize = 0; - for (pg = firstPage; pg <= lastPage; ++pg) { - page = doc->getCatalog()->getPage(pg); - if ((resDict = page->getResourceDict())) { - scanFonts(resDict, doc); - } - annots = new Annots(doc, 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()) { - scanFonts(obj2.getDict(), doc); - } - obj2.free(); - } - obj1.free(); - } - delete annots; - } - - exitCode = 0; - - // clean up - gfree(fonts); - err1: - delete doc; - delete globalParams; - err0: - - // check for memory leaks - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} - -static void scanFonts(Dict *resDict, PDFDoc *doc) { - Object obj1, obj2, xObjDict, xObj, 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))) { - scanFont(font, doc); - } - } - delete gfxFontDict; - } - obj1.free(); - - // recursively scan any resource dictionaries in objects in this - // resource dictionary - resDict->lookup("XObject", &xObjDict); - if (xObjDict.isDict()) { - for (i = 0; i < xObjDict.dictGetLength(); ++i) { - xObjDict.dictGetVal(i, &xObj); - if (xObj.isStream()) { - xObj.streamGetDict()->lookup("Resources", &resObj); - if (resObj.isDict()) { - scanFonts(resObj.getDict(), doc); - } - resObj.free(); - } - xObj.free(); - } - } - xObjDict.free(); -} - -static void scanFont(GfxFont *font, PDFDoc *doc) { - Ref fontRef, embRef; - Object fontObj, toUnicodeObj; - GString *name; - GBool emb, subset, hasToUnicode; - int i; - - fontRef = *font->getID(); - - // check for an already-seen font - for (i = 0; i < fontsLen; ++i) { - if (fontRef.num == fonts[i].num && fontRef.gen == fonts[i].gen) { - return; - } - } - - // font name - name = font->getOrigName(); - - // check for an embedded font - if (font->getType() == fontType3) { - emb = gTrue; - } else { - emb = font->getEmbeddedFontID(&embRef); - } - - // 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) == '+'; - } - - // print the font info - printf("%-36s %-17s %-3s %-3s %-3s", - name ? name->getCString() : "[none]", - fontTypeNames[font->getType()], - emb ? "yes" : "no", - subset ? "yes" : "no", - hasToUnicode ? "yes" : "no"); - if (fontRef.gen >= 100000) { - printf(" [none]\n"); - } else { - printf(" %6d %2d\n", fontRef.num, fontRef.gen); - } - - // add this font to the list - if (fontsLen == fontsSize) { - if (fontsSize <= INT_MAX - 32) { - fontsSize += 32; - } else { - // let greallocn throw an exception - fontsSize = -1; - } - fonts = (Ref *)greallocn(fonts, fontsSize, sizeof(Ref)); - } - fonts[fontsLen++] = *font->getID(); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/pdfimages.cc b/thirdparty/xpdf/3.02/src/xpdf/pdfimages.cc deleted file mode 100644 index dc794433..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/pdfimages.cc +++ /dev/null @@ -1,156 +0,0 @@ -//======================================================================== -// -// pdfimages.cc -// -// Copyright 1998-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include -#include -#include -#include "parseargs.h" -#include "GString.h" -#include "gmem.h" -#include "GlobalParams.h" -#include "Object.h" -#include "Stream.h" -#include "Array.h" -#include "Dict.h" -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" -#include "PDFDoc.h" -#include "ImageOutputDev.h" -#include "Error.h" -#include "config.h" - -static int firstPage = 1; -static int lastPage = 0; -static GBool dumpJPEG = gFalse; -static char ownerPassword[33] = "\001"; -static char userPassword[33] = "\001"; -static GBool quiet = gFalse; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, - "first page to convert"}, - {"-l", argInt, &lastPage, 0, - "last page to convert"}, - {"-j", argFlag, &dumpJPEG, 0, - "write JPEG images as JPEG files"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-q", argFlag, &quiet, 0, - "don't print any messages or errors"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -int main(int argc, char *argv[]) { - PDFDoc *doc; - GString *fileName; - char *imgRoot; - GString *ownerPW, *userPW; - ImageOutputDev *imgOut; - GBool ok; - int exitCode; - - exitCode = 99; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc != 3 || printVersion || printHelp) { - fprintf(stderr, "pdfimages version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("pdfimages", " ", argDesc); - } - goto err0; - } - fileName = new GString(argv[1]); - imgRoot = argv[2]; - - // read config file - globalParams = new GlobalParams(cfgFileName); - if (quiet) { - globalParams->setErrQuiet(quiet); - } - - // open PDF file - if (ownerPassword[0] != '\001') { - ownerPW = new GString(ownerPassword); - } else { - ownerPW = NULL; - } - if (userPassword[0] != '\001') { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, ownerPW, userPW); - if (userPW) { - delete userPW; - } - if (ownerPW) { - delete ownerPW; - } - if (!doc->isOk()) { - exitCode = 1; - goto err1; - } - - // check for copy permission - if (!doc->okToCopy()) { - error(errNotAllowed, -1, - "Copying of images from this document is not allowed."); - exitCode = 3; - goto err1; - } - - // get page range - if (firstPage < 1) - firstPage = 1; - if (lastPage < 1 || lastPage > doc->getNumPages()) - lastPage = doc->getNumPages(); - - // write image files - imgOut = new ImageOutputDev(imgRoot, dumpJPEG); - if (imgOut->isOk()) { - doc->displayPages(imgOut, firstPage, lastPage, 72, 72, 0, - gFalse, gTrue, gFalse); - } - delete imgOut; - - exitCode = 0; - - // clean up - err1: - delete doc; - delete globalParams; - err0: - - // check for memory leaks - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/pdfinfo.cc b/thirdparty/xpdf/3.02/src/xpdf/pdfinfo.cc deleted file mode 100644 index e7749645..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/pdfinfo.cc +++ /dev/null @@ -1,401 +0,0 @@ -//======================================================================== -// -// pdfinfo.cc -// -// Copyright 1998-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include -#include -#include -#include -#include -#include "parseargs.h" -#include "GString.h" -#include "gmem.h" -#include "GlobalParams.h" -#include "Object.h" -#include "Stream.h" -#include "Array.h" -#include "Dict.h" -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" -#include "PDFDoc.h" -#include "CharTypes.h" -#include "UnicodeMap.h" -#include "PDFDocEncoding.h" -#include "Error.h" -#include "config.h" - -static void printInfoString(Dict *infoDict, char *key, char *text, - UnicodeMap *uMap); -static void printInfoDate(Dict *infoDict, char *key, char *text); -static void printBox(char *text, PDFRectangle *box); - -static int firstPage = 1; -static int lastPage = 0; -static GBool printBoxes = gFalse; -static GBool printMetadata = gFalse; -static char textEncName[128] = ""; -static char ownerPassword[33] = "\001"; -static char userPassword[33] = "\001"; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, - "first page to convert"}, - {"-l", argInt, &lastPage, 0, - "last page to convert"}, - {"-box", argFlag, &printBoxes, 0, - "print the page bounding boxes"}, - {"-meta", argFlag, &printMetadata, 0, - "print the document metadata (XML)"}, - {"-enc", argString, textEncName, sizeof(textEncName), - "output text encoding name"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -int main(int argc, char *argv[]) { - PDFDoc *doc; - GString *fileName; - GString *ownerPW, *userPW; - UnicodeMap *uMap; - Page *page; - Object info, xfa; - Object *acroForm; - char buf[256]; - double w, h, wISO, hISO; - FILE *f; - GString *metadata; - GBool ok; - int exitCode; - int pg, i; - GBool multiPage; - - exitCode = 99; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc != 2 || printVersion || printHelp) { - fprintf(stderr, "pdfinfo version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("pdfinfo", "", argDesc); - } - goto err0; - } - fileName = new GString(argv[1]); - - // read config file - globalParams = new GlobalParams(cfgFileName); - if (textEncName[0]) { - globalParams->setTextEncoding(textEncName); - } - - // get mapping to output encoding - if (!(uMap = globalParams->getTextEncoding())) { - error(errConfig, -1, "Couldn't get text encoding"); - delete fileName; - goto err1; - } - - // open PDF file - if (ownerPassword[0] != '\001') { - ownerPW = new GString(ownerPassword); - } else { - ownerPW = NULL; - } - if (userPassword[0] != '\001') { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, ownerPW, userPW); - if (userPW) { - delete userPW; - } - if (ownerPW) { - delete ownerPW; - } - if (!doc->isOk()) { - exitCode = 1; - goto err2; - } - - // get page range - if (firstPage < 1) { - firstPage = 1; - } - if (lastPage == 0) { - multiPage = gFalse; - lastPage = 1; - } else { - multiPage = gTrue; - } - if (lastPage < 1 || lastPage > doc->getNumPages()) { - lastPage = doc->getNumPages(); - } - - // print doc info - doc->getDocInfo(&info); - if (info.isDict()) { - printInfoString(info.getDict(), "Title", "Title: ", uMap); - printInfoString(info.getDict(), "Subject", "Subject: ", uMap); - printInfoString(info.getDict(), "Keywords", "Keywords: ", uMap); - printInfoString(info.getDict(), "Author", "Author: ", uMap); - printInfoString(info.getDict(), "Creator", "Creator: ", uMap); - printInfoString(info.getDict(), "Producer", "Producer: ", uMap); - printInfoDate(info.getDict(), "CreationDate", "CreationDate: "); - printInfoDate(info.getDict(), "ModDate", "ModDate: "); - } - info.free(); - - // print tagging info - printf("Tagged: %s\n", - doc->getStructTreeRoot()->isDict() ? "yes" : "no"); - - // print form info - if ((acroForm = doc->getCatalog()->getAcroForm())->isDict()) { - acroForm->dictLookup("XFA", &xfa); - if (xfa.isStream() || xfa.isArray()) { - printf("Form: XFA\n"); - } else { - printf("Form: AcroForm\n"); - } - xfa.free(); - } else { - printf("Form: none\n"); - } - - // print page count - printf("Pages: %d\n", doc->getNumPages()); - - // print encryption info - printf("Encrypted: "); - if (doc->isEncrypted()) { - printf("yes (print:%s copy:%s change:%s addNotes:%s)\n", - doc->okToPrint(gTrue) ? "yes" : "no", - doc->okToCopy(gTrue) ? "yes" : "no", - doc->okToChange(gTrue) ? "yes" : "no", - doc->okToAddNotes(gTrue) ? "yes" : "no"); - } else { - printf("no\n"); - } - - // print page size - for (pg = firstPage; pg <= lastPage; ++pg) { - w = doc->getPageCropWidth(pg); - h = doc->getPageCropHeight(pg); - if (multiPage) { - printf("Page %4d size: %g x %g pts", pg, w, h); - } else { - printf("Page size: %g x %g pts", w, h); - } - if ((fabs(w - 612) < 0.1 && fabs(h - 792) < 0.1) || - (fabs(w - 792) < 0.1 && fabs(h - 612) < 0.1)) { - printf(" (letter)"); - } else { - hISO = sqrt(sqrt(2.0)) * 7200 / 2.54; - wISO = hISO / sqrt(2.0); - for (i = 0; i <= 6; ++i) { - if ((fabs(w - wISO) < 1 && fabs(h - hISO) < 1) || - (fabs(w - hISO) < 1 && fabs(h - wISO) < 1)) { - printf(" (A%d)", i); - break; - } - hISO = wISO; - wISO /= sqrt(2.0); - } - } - printf("\n"); - } - - // print the boxes - if (printBoxes) { - if (multiPage) { - for (pg = firstPage; pg <= lastPage; ++pg) { - page = doc->getCatalog()->getPage(pg); - sprintf(buf, "Page %4d MediaBox: ", pg); - printBox(buf, page->getMediaBox()); - sprintf(buf, "Page %4d CropBox: ", pg); - printBox(buf, page->getCropBox()); - sprintf(buf, "Page %4d BleedBox: ", pg); - printBox(buf, page->getBleedBox()); - sprintf(buf, "Page %4d TrimBox: ", pg); - printBox(buf, page->getTrimBox()); - sprintf(buf, "Page %4d ArtBox: ", pg); - printBox(buf, page->getArtBox()); - } - } else { - page = doc->getCatalog()->getPage(firstPage); - printBox("MediaBox: ", page->getMediaBox()); - printBox("CropBox: ", page->getCropBox()); - printBox("BleedBox: ", page->getBleedBox()); - printBox("TrimBox: ", page->getTrimBox()); - printBox("ArtBox: ", page->getArtBox()); - } - } - - // print file size -#ifdef VMS - f = fopen(fileName->getCString(), "rb", "ctx=stm"); -#else - f = fopen(fileName->getCString(), "rb"); -#endif - if (f) { -#if HAVE_FSEEKO - fseeko(f, 0, SEEK_END); - printf("File size: %u bytes\n", (Guint)ftello(f)); -#elif HAVE_FSEEK64 - fseek64(f, 0, SEEK_END); - printf("File size: %u bytes\n", (Guint)ftell64(f)); -#else - fseek(f, 0, SEEK_END); - printf("File size: %d bytes\n", (int)ftell(f)); -#endif - fclose(f); - } - - // print linearization info - printf("Optimized: %s\n", doc->isLinearized() ? "yes" : "no"); - - // print PDF version - printf("PDF version: %.1f\n", doc->getPDFVersion()); - - // print the metadata - if (printMetadata && (metadata = doc->readMetadata())) { - fputs("Metadata:\n", stdout); - fputs(metadata->getCString(), stdout); - fputc('\n', stdout); - delete metadata; - } - - exitCode = 0; - - // clean up - err2: - uMap->decRefCnt(); - delete doc; - err1: - delete globalParams; - err0: - - // check for memory leaks - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} - -static void printInfoString(Dict *infoDict, char *key, char *text, - UnicodeMap *uMap) { - Object obj; - GString *s1; - GBool isUnicode; - Unicode u; - char buf[8]; - int i, n; - - if (infoDict->lookup(key, &obj)->isString()) { - fputs(text, stdout); - s1 = obj.getString(); - if ((s1->getChar(0) & 0xff) == 0xfe && - (s1->getChar(1) & 0xff) == 0xff) { - isUnicode = gTrue; - i = 2; - } else { - isUnicode = gFalse; - i = 0; - } - while (i < obj.getString()->getLength()) { - if (isUnicode) { - u = ((s1->getChar(i) & 0xff) << 8) | - (s1->getChar(i+1) & 0xff); - i += 2; - } else { - u = pdfDocEncoding[s1->getChar(i) & 0xff]; - ++i; - } - n = uMap->mapUnicode(u, buf, sizeof(buf)); - fwrite(buf, 1, n, stdout); - } - fputc('\n', stdout); - } - obj.free(); -} - -static void printInfoDate(Dict *infoDict, char *key, char *text) { - Object obj; - char *s; - int year, mon, day, hour, min, sec, n; - struct tm tmStruct; - char buf[256]; - - if (infoDict->lookup(key, &obj)->isString()) { - fputs(text, stdout); - s = obj.getString()->getCString(); - if (s[0] == 'D' && s[1] == ':') { - s += 2; - } - if ((n = sscanf(s, "%4d%2d%2d%2d%2d%2d", - &year, &mon, &day, &hour, &min, &sec)) >= 1) { - switch (n) { - case 1: mon = 1; - case 2: day = 1; - case 3: hour = 0; - case 4: min = 0; - case 5: sec = 0; - } - tmStruct.tm_year = year - 1900; - tmStruct.tm_mon = mon - 1; - tmStruct.tm_mday = day; - tmStruct.tm_hour = hour; - tmStruct.tm_min = min; - tmStruct.tm_sec = sec; - tmStruct.tm_wday = -1; - tmStruct.tm_yday = -1; - tmStruct.tm_isdst = -1; - // compute the tm_wday and tm_yday fields - if (mktime(&tmStruct) != (time_t)-1 && - strftime(buf, sizeof(buf), "%c", &tmStruct)) { - fputs(buf, stdout); - } else { - fputs(s, stdout); - } - } else { - fputs(s, stdout); - } - - - - fputc('\n', stdout); - } - obj.free(); -} - -static void printBox(char *text, PDFRectangle *box) { - printf("%s%8.2f %8.2f %8.2f %8.2f\n", - text, box->x1, box->y1, box->x2, box->y2); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/pdftoppm.cc b/thirdparty/xpdf/3.02/src/xpdf/pdftoppm.cc deleted file mode 100644 index cfc72368..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/pdftoppm.cc +++ /dev/null @@ -1,209 +0,0 @@ -//======================================================================== -// -// pdftoppm.cc -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include "parseargs.h" -#include "gmem.h" -#include "GString.h" -#include "GlobalParams.h" -#include "Object.h" -#include "PDFDoc.h" -#include "SplashBitmap.h" -#include "Splash.h" -#include "SplashOutputDev.h" -#include "config.h" - -static int firstPage = 1; -static int lastPage = 0; -static int resolution = 150; -static GBool mono = gFalse; -static GBool gray = gFalse; -static char enableT1libStr[16] = ""; -static char enableFreeTypeStr[16] = ""; -static char antialiasStr[16] = ""; -static char vectorAntialiasStr[16] = ""; -static char ownerPassword[33] = ""; -static char userPassword[33] = ""; -static GBool quiet = gFalse; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, - "first page to print"}, - {"-l", argInt, &lastPage, 0, - "last page to print"}, - {"-r", argInt, &resolution, 0, - "resolution, in DPI (default is 150)"}, - {"-mono", argFlag, &mono, 0, - "generate a monochrome PBM file"}, - {"-gray", argFlag, &gray, 0, - "generate a grayscale PGM file"}, -#if HAVE_T1LIB_H - {"-t1lib", argString, enableT1libStr, sizeof(enableT1libStr), - "enable t1lib font rasterizer: yes, no"}, -#endif -#if HAVE_FREETYPE_FREETYPE_H | HAVE_FREETYPE_H - {"-freetype", argString, enableFreeTypeStr, sizeof(enableFreeTypeStr), - "enable FreeType font rasterizer: yes, no"}, -#endif - {"-aa", argString, antialiasStr, sizeof(antialiasStr), - "enable font anti-aliasing: yes, no"}, - {"-aaVector", argString, vectorAntialiasStr, sizeof(vectorAntialiasStr), - "enable vector anti-aliasing: yes, no"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-q", argFlag, &quiet, 0, - "don't print any messages or errors"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -int main(int argc, char *argv[]) { - PDFDoc *doc; - GString *fileName; - char *ppmRoot; - GString *ppmFile; - GString *ownerPW, *userPW; - SplashColor paperColor; - SplashOutputDev *splashOut; - GBool ok; - int exitCode; - int pg; - - exitCode = 99; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (mono && gray) { - ok = gFalse; - } - if (!ok || argc != 3 || printVersion || printHelp) { - fprintf(stderr, "pdftoppm version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("pdftoppm", " ", argDesc); - } - goto err0; - } - fileName = new GString(argv[1]); - ppmRoot = argv[2]; - - // read config file - globalParams = new GlobalParams(cfgFileName); - globalParams->setupBaseFonts(NULL); - if (enableT1libStr[0]) { - if (!globalParams->setEnableT1lib(enableT1libStr)) { - fprintf(stderr, "Bad '-t1lib' value on command line\n"); - } - } - if (enableFreeTypeStr[0]) { - if (!globalParams->setEnableFreeType(enableFreeTypeStr)) { - fprintf(stderr, "Bad '-freetype' value on command line\n"); - } - } - if (antialiasStr[0]) { - if (!globalParams->setAntialias(antialiasStr)) { - fprintf(stderr, "Bad '-aa' value on command line\n"); - } - } - if (vectorAntialiasStr[0]) { - if (!globalParams->setVectorAntialias(vectorAntialiasStr)) { - fprintf(stderr, "Bad '-aaVector' value on command line\n"); - } - } - if (quiet) { - globalParams->setErrQuiet(quiet); - } - - // open PDF file - if (ownerPassword[0]) { - ownerPW = new GString(ownerPassword); - } else { - ownerPW = NULL; - } - if (userPassword[0]) { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, ownerPW, userPW); - if (userPW) { - delete userPW; - } - if (ownerPW) { - delete ownerPW; - } - if (!doc->isOk()) { - exitCode = 1; - goto err1; - } - - // get page range - if (firstPage < 1) - firstPage = 1; - if (lastPage < 1 || lastPage > doc->getNumPages()) - lastPage = doc->getNumPages(); - - - // write PPM files - if (mono) { - paperColor[0] = 0xff; - splashOut = new SplashOutputDev(splashModeMono1, 1, gFalse, paperColor); - } else if (gray) { - paperColor[0] = 0xff; - splashOut = new SplashOutputDev(splashModeMono8, 1, gFalse, paperColor); - } else { - paperColor[0] = paperColor[1] = paperColor[2] = 0xff; - splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, paperColor); - } - splashOut->startDoc(doc->getXRef()); - for (pg = firstPage; pg <= lastPage; ++pg) { - doc->displayPage(splashOut, pg, resolution, resolution, 0, - gFalse, gTrue, gFalse); - if (!strcmp(ppmRoot, "-")) { - splashOut->getBitmap()->writePNMFile(stdout); - } else { - ppmFile = GString::format("{0:s}-{1:06d}.{2:s}", - ppmRoot, pg, - mono ? "pbm" : gray ? "pgm" : "ppm"); - splashOut->getBitmap()->writePNMFile(ppmFile->getCString()); - delete ppmFile; - } - } - delete splashOut; - - exitCode = 0; - - // clean up - err1: - delete doc; - delete globalParams; - err0: - - // check for memory leaks - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/pdftops.cc b/thirdparty/xpdf/3.02/src/xpdf/pdftops.cc deleted file mode 100644 index eae441f1..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/pdftops.cc +++ /dev/null @@ -1,344 +0,0 @@ -//======================================================================== -// -// pdftops.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include -#include -#include -#include "parseargs.h" -#include "GString.h" -#include "gmem.h" -#include "GlobalParams.h" -#include "Object.h" -#include "Stream.h" -#include "Array.h" -#include "Dict.h" -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" -#include "PDFDoc.h" -#include "PSOutputDev.h" -#include "Error.h" -#include "config.h" - -static int firstPage = 1; -static int lastPage = 0; -static GBool level1 = gFalse; -static GBool level1Sep = gFalse; -static GBool level2 = gFalse; -static GBool level2Sep = gFalse; -static GBool level3 = gFalse; -static GBool level3Sep = gFalse; -static GBool doEPS = gFalse; -static GBool doForm = gFalse; -#if OPI_SUPPORT -static GBool doOPI = gFalse; -#endif -static GBool noEmbedT1Fonts = gFalse; -static GBool noEmbedTTFonts = gFalse; -static GBool noEmbedCIDPSFonts = gFalse; -static GBool noEmbedCIDTTFonts = gFalse; -static GBool preload = gFalse; -static char paperSize[15] = ""; -static int paperWidth = 0; -static int paperHeight = 0; -static GBool noCrop = gFalse; -static GBool expand = gFalse; -static GBool noShrink = gFalse; -static GBool noCenter = gFalse; -static GBool pageCrop = gFalse; -static GBool duplex = gFalse; -static char ownerPassword[33] = "\001"; -static char userPassword[33] = "\001"; -static GBool quiet = gFalse; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, - "first page to print"}, - {"-l", argInt, &lastPage, 0, - "last page to print"}, - {"-level1", argFlag, &level1, 0, - "generate Level 1 PostScript"}, - {"-level1sep", argFlag, &level1Sep, 0, - "generate Level 1 separable PostScript"}, - {"-level2", argFlag, &level2, 0, - "generate Level 2 PostScript"}, - {"-level2sep", argFlag, &level2Sep, 0, - "generate Level 2 separable PostScript"}, - {"-level3", argFlag, &level3, 0, - "generate Level 3 PostScript"}, - {"-level3sep", argFlag, &level3Sep, 0, - "generate Level 3 separable PostScript"}, - {"-eps", argFlag, &doEPS, 0, - "generate Encapsulated PostScript (EPS)"}, - {"-form", argFlag, &doForm, 0, - "generate a PostScript form"}, -#if OPI_SUPPORT - {"-opi", argFlag, &doOPI, 0, - "generate OPI comments"}, -#endif - {"-noembt1", argFlag, &noEmbedT1Fonts, 0, - "don't embed Type 1 fonts"}, - {"-noembtt", argFlag, &noEmbedTTFonts, 0, - "don't embed TrueType fonts"}, - {"-noembcidps", argFlag, &noEmbedCIDPSFonts, 0, - "don't embed CID PostScript fonts"}, - {"-noembcidtt", argFlag, &noEmbedCIDTTFonts, 0, - "don't embed CID TrueType fonts"}, - {"-preload", argFlag, &preload, 0, - "preload images and forms"}, - {"-paper", argString, paperSize, sizeof(paperSize), - "paper size (letter, legal, A4, A3, match)"}, - {"-paperw", argInt, &paperWidth, 0, - "paper width, in points"}, - {"-paperh", argInt, &paperHeight, 0, - "paper height, in points"}, - {"-nocrop", argFlag, &noCrop, 0, - "don't crop pages to CropBox"}, - {"-expand", argFlag, &expand, 0, - "expand pages smaller than the paper size"}, - {"-noshrink", argFlag, &noShrink, 0, - "don't shrink pages larger than the paper size"}, - {"-nocenter", argFlag, &noCenter, 0, - "don't center pages smaller than the paper size"}, - {"-pagecrop", argFlag, &pageCrop, 0, - "treat the CropBox as the page size"}, - {"-duplex", argFlag, &duplex, 0, - "enable duplex printing"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-q", argFlag, &quiet, 0, - "don't print any messages or errors"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -int main(int argc, char *argv[]) { - PDFDoc *doc; - GString *fileName; - GString *psFileName; - PSLevel level; - PSOutMode mode; - GString *ownerPW, *userPW; - PSOutputDev *psOut; - GBool ok; - char *p; - int exitCode; - - exitCode = 99; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc < 2 || argc > 3 || printVersion || printHelp) { - fprintf(stderr, "pdftops version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("pdftops", " []", argDesc); - } - exit(1); - } - if ((level1 ? 1 : 0) + - (level1Sep ? 1 : 0) + - (level2 ? 1 : 0) + - (level2Sep ? 1 : 0) + - (level3 ? 1 : 0) + - (level3Sep ? 1 : 0) > 1) { - fprintf(stderr, "Error: use only one of the 'level' options.\n"); - exit(1); - } - if (doEPS && doForm) { - fprintf(stderr, "Error: use only one of -eps and -form\n"); - exit(1); - } - if (level1) { - level = psLevel1; - } else if (level1Sep) { - level = psLevel1Sep; - } else if (level2Sep) { - level = psLevel2Sep; - } else if (level3) { - level = psLevel3; - } else if (level3Sep) { - level = psLevel3Sep; - } else { - level = psLevel2; - } - if (doForm && level < psLevel2) { - fprintf(stderr, "Error: forms are only available with Level 2 output.\n"); - exit(1); - } - mode = doEPS ? psModeEPS - : doForm ? psModeForm - : psModePS; - fileName = new GString(argv[1]); - - // read config file - globalParams = new GlobalParams(cfgFileName); -#if HAVE_SPLASH - globalParams->setupBaseFonts(NULL); -#endif - if (paperSize[0]) { - if (!globalParams->setPSPaperSize(paperSize)) { - fprintf(stderr, "Invalid paper size\n"); - delete fileName; - goto err0; - } - } else { - if (paperWidth) { - globalParams->setPSPaperWidth(paperWidth); - } - if (paperHeight) { - globalParams->setPSPaperHeight(paperHeight); - } - } - if (noCrop) { - globalParams->setPSCrop(gFalse); - } - if (expand) { - globalParams->setPSExpandSmaller(gTrue); - } - if (noShrink) { - globalParams->setPSShrinkLarger(gFalse); - } - if (noCenter) { - globalParams->setPSCenter(gFalse); - } - if (duplex) { - globalParams->setPSDuplex(duplex); - } - if (level1 || level1Sep || level2 || level2Sep || level3 || level3Sep) { - globalParams->setPSLevel(level); - } - if (noEmbedT1Fonts) { - globalParams->setPSEmbedType1(!noEmbedT1Fonts); - } - if (noEmbedTTFonts) { - globalParams->setPSEmbedTrueType(!noEmbedTTFonts); - } - if (noEmbedCIDPSFonts) { - globalParams->setPSEmbedCIDPostScript(!noEmbedCIDPSFonts); - } - if (noEmbedCIDTTFonts) { - globalParams->setPSEmbedCIDTrueType(!noEmbedCIDTTFonts); - } - if (preload) { - globalParams->setPSPreload(preload); - } -#if OPI_SUPPORT - if (doOPI) { - globalParams->setPSOPI(doOPI); - } -#endif - if (quiet) { - globalParams->setErrQuiet(quiet); - } - - // open PDF file - if (ownerPassword[0] != '\001') { - ownerPW = new GString(ownerPassword); - } else { - ownerPW = NULL; - } - if (userPassword[0] != '\001') { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, ownerPW, userPW); - if (userPW) { - delete userPW; - } - if (ownerPW) { - delete ownerPW; - } - if (!doc->isOk()) { - exitCode = 1; - goto err1; - } - - // check for print permission - if (!doc->okToPrint()) { - error(errNotAllowed, -1, "Printing this document is not allowed."); - exitCode = 3; - goto err1; - } - - // construct PostScript file name - if (argc == 3) { - psFileName = new GString(argv[2]); - } else { - p = fileName->getCString() + fileName->getLength() - 4; - if (!strcmp(p, ".pdf") || !strcmp(p, ".PDF")) { - psFileName = new GString(fileName->getCString(), - fileName->getLength() - 4); - } else { - psFileName = fileName->copy(); - } - psFileName->append(doEPS ? ".eps" : ".ps"); - } - - // get page range - if (firstPage < 1) { - firstPage = 1; - } - if (lastPage < 1 || lastPage > doc->getNumPages()) { - lastPage = doc->getNumPages(); - } - - // check for multi-page EPS or form - if ((doEPS || doForm) && firstPage != lastPage) { - error(errCommandLine, -1, "EPS and form files can only contain one page."); - goto err2; - } - - // write PostScript file - psOut = new PSOutputDev(psFileName->getCString(), doc, - firstPage, lastPage, mode); - if (psOut->isOk()) { - doc->displayPages(psOut, firstPage, lastPage, 72, 72, - 0, !pageCrop, globalParams->getPSCrop(), gTrue); - } else { - delete psOut; - exitCode = 2; - goto err2; - } - delete psOut; - - exitCode = 0; - - // clean up - err2: - delete psFileName; - err1: - delete doc; - err0: - delete globalParams; - - // check for memory leaks - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/pdftotext.cc b/thirdparty/xpdf/3.02/src/xpdf/pdftotext.cc deleted file mode 100644 index eee2d667..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/pdftotext.cc +++ /dev/null @@ -1,340 +0,0 @@ -//======================================================================== -// -// pdftotext.cc -// -// Copyright 1997-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#include -#include -#include -#include "parseargs.h" -#include "GString.h" -#include "gmem.h" -#include "GlobalParams.h" -#include "Object.h" -#include "Stream.h" -#include "Array.h" -#include "Dict.h" -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" -#include "PDFDoc.h" -#include "TextOutputDev.h" -#include "CharTypes.h" -#include "UnicodeMap.h" -#include "Error.h" -#include "config.h" - -static void printInfoString(FILE *f, Dict *infoDict, char *key, - char *text1, char *text2, UnicodeMap *uMap); -static void printInfoDate(FILE *f, Dict *infoDict, char *key, char *fmt); - -static int firstPage = 1; -static int lastPage = 0; -static GBool physLayout = gFalse; -static double fixedPitch = 0; -static GBool rawOrder = gFalse; -static GBool htmlMeta = gFalse; -static char textEncName[128] = ""; -static char textEOL[16] = ""; -static GBool noPageBreaks = gFalse; -static char ownerPassword[33] = "\001"; -static char userPassword[33] = "\001"; -static GBool quiet = gFalse; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-f", argInt, &firstPage, 0, - "first page to convert"}, - {"-l", argInt, &lastPage, 0, - "last page to convert"}, - {"-layout", argFlag, &physLayout, 0, - "maintain original physical layout"}, - {"-fixed", argFP, &fixedPitch, 0, - "assume fixed-pitch (or tabular) text"}, - {"-raw", argFlag, &rawOrder, 0, - "keep strings in content stream order"}, - {"-htmlmeta", argFlag, &htmlMeta, 0, - "generate a simple HTML file, including the meta information"}, - {"-enc", argString, textEncName, sizeof(textEncName), - "output text encoding name"}, - {"-eol", argString, textEOL, sizeof(textEOL), - "output end-of-line convention (unix, dos, or mac)"}, - {"-nopgbrk", argFlag, &noPageBreaks, 0, - "don't insert page breaks between pages"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-q", argFlag, &quiet, 0, - "don't print any messages or errors"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -int main(int argc, char *argv[]) { - PDFDoc *doc; - GString *fileName; - GString *textFileName; - GString *ownerPW, *userPW; - TextOutputDev *textOut; - FILE *f; - UnicodeMap *uMap; - Object info; - GBool ok; - char *p; - int exitCode; - - exitCode = 99; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (!ok || argc < 2 || argc > 3 || printVersion || printHelp) { - fprintf(stderr, "pdftotext version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("pdftotext", " []", argDesc); - } - goto err0; - } - fileName = new GString(argv[1]); - if (fixedPitch) { - physLayout = gTrue; - } - - // read config file - globalParams = new GlobalParams(cfgFileName); - if (textEncName[0]) { - globalParams->setTextEncoding(textEncName); - } - if (textEOL[0]) { - if (!globalParams->setTextEOL(textEOL)) { - fprintf(stderr, "Bad '-eol' value on command line\n"); - } - } - if (noPageBreaks) { - globalParams->setTextPageBreaks(gFalse); - } - if (quiet) { - globalParams->setErrQuiet(quiet); - } - - // get mapping to output encoding - if (!(uMap = globalParams->getTextEncoding())) { - error(errConfig, -1, "Couldn't get text encoding"); - delete fileName; - goto err1; - } - - // open PDF file - if (ownerPassword[0] != '\001') { - ownerPW = new GString(ownerPassword); - } else { - ownerPW = NULL; - } - if (userPassword[0] != '\001') { - userPW = new GString(userPassword); - } else { - userPW = NULL; - } - doc = new PDFDoc(fileName, ownerPW, userPW); - if (userPW) { - delete userPW; - } - if (ownerPW) { - delete ownerPW; - } - if (!doc->isOk()) { - exitCode = 1; - goto err2; - } - - // check for copy permission - if (!doc->okToCopy()) { - error(errNotAllowed, -1, - "Copying of text from this document is not allowed."); - exitCode = 3; - goto err2; - } - - // construct text file name - if (argc == 3) { - textFileName = new GString(argv[2]); - } else { - p = fileName->getCString() + fileName->getLength() - 4; - if (!strcmp(p, ".pdf") || !strcmp(p, ".PDF")) { - textFileName = new GString(fileName->getCString(), - fileName->getLength() - 4); - } else { - textFileName = fileName->copy(); - } - textFileName->append(htmlMeta ? ".html" : ".txt"); - } - - // get page range - if (firstPage < 1) { - firstPage = 1; - } - if (lastPage < 1 || lastPage > doc->getNumPages()) { - lastPage = doc->getNumPages(); - } - - // write HTML header - if (htmlMeta) { - if (!textFileName->cmp("-")) { - f = stdout; - } else { - if (!(f = fopen(textFileName->getCString(), "wb"))) { - error(errIO, -1, "Couldn't open text file '{0:t}'", textFileName); - exitCode = 2; - goto err3; - } - } - fputs("\n", f); - fputs("\n", f); - doc->getDocInfo(&info); - if (info.isDict()) { - printInfoString(f, info.getDict(), "Title", "", "\n", - uMap); - printInfoString(f, info.getDict(), "Subject", - "\n", uMap); - printInfoString(f, info.getDict(), "Keywords", - "\n", uMap); - printInfoString(f, info.getDict(), "Author", - "\n", uMap); - printInfoString(f, info.getDict(), "Creator", - "\n", uMap); - printInfoString(f, info.getDict(), "Producer", - "\n", uMap); - printInfoDate(f, info.getDict(), "CreationDate", - "\n"); - printInfoDate(f, info.getDict(), "LastModifiedDate", - "\n"); - } - info.free(); - fputs("\n", f); - fputs("\n", f); - fputs("
\n", f);
-    if (f != stdout) {
-      fclose(f);
-    }
-  }
-
-  // write text file
-  textOut = new TextOutputDev(textFileName->getCString(),
-			      physLayout, fixedPitch, rawOrder, htmlMeta);
-  if (textOut->isOk()) {
-    doc->displayPages(textOut, firstPage, lastPage, 72, 72, 0,
-		      gFalse, gTrue, gFalse);
-  } else {
-    delete textOut;
-    exitCode = 2;
-    goto err3;
-  }
-  delete textOut;
-
-  // write end of HTML file
-  if (htmlMeta) {
-    if (!textFileName->cmp("-")) {
-      f = stdout;
-    } else {
-      if (!(f = fopen(textFileName->getCString(), "ab"))) {
-	error(errIO, -1, "Couldn't open text file '{0:t}'", textFileName);
-	exitCode = 2;
-	goto err3;
-      }
-    }
-    fputs("
\n", f); - fputs("\n", f); - fputs("\n", f); - if (f != stdout) { - fclose(f); - } - } - - exitCode = 0; - - // clean up - err3: - delete textFileName; - err2: - delete doc; - uMap->decRefCnt(); - err1: - delete globalParams; - err0: - - // check for memory leaks - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} - -static void printInfoString(FILE *f, Dict *infoDict, char *key, - char *text1, char *text2, UnicodeMap *uMap) { - Object obj; - GString *s1; - GBool isUnicode; - Unicode u; - char buf[8]; - int i, n; - - if (infoDict->lookup(key, &obj)->isString()) { - fputs(text1, f); - s1 = obj.getString(); - if ((s1->getChar(0) & 0xff) == 0xfe && - (s1->getChar(1) & 0xff) == 0xff) { - isUnicode = gTrue; - i = 2; - } else { - isUnicode = gFalse; - i = 0; - } - while (i < obj.getString()->getLength()) { - if (isUnicode) { - u = ((s1->getChar(i) & 0xff) << 8) | - (s1->getChar(i+1) & 0xff); - i += 2; - } else { - u = s1->getChar(i) & 0xff; - ++i; - } - n = uMap->mapUnicode(u, buf, sizeof(buf)); - fwrite(buf, 1, n, f); - } - fputs(text2, f); - } - obj.free(); -} - -static void printInfoDate(FILE *f, Dict *infoDict, char *key, char *fmt) { - Object obj; - char *s; - - if (infoDict->lookup(key, &obj)->isString()) { - s = obj.getString()->getCString(); - if (s[0] == 'D' && s[1] == ':') { - s += 2; - } - fprintf(f, fmt, s); - } - obj.free(); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/print.xbm b/thirdparty/xpdf/3.02/src/xpdf/print.xbm deleted file mode 100644 index 209eb435..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/print.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define print_width 15 -#define print_height 15 -static unsigned char print_bits[] = { - 0xf0, 0x7f, 0x10, 0x40, 0x10, 0x40, 0xc8, 0x23, 0x08, 0x20, 0x68, 0x23, - 0x04, 0x10, 0x34, 0x10, 0x04, 0x10, 0xff, 0x7f, 0x55, 0x55, 0xab, 0x6a, - 0x55, 0x55, 0xab, 0x6a, 0xfe, 0x3f}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/printDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/printDis.xbm deleted file mode 100644 index 19e962d5..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/printDis.xbm +++ /dev/null @@ -1,6 +0,0 @@ -#define printDis_width 15 -#define printDis_height 15 -static unsigned char printDis_bits[] = { - 0xa0, 0x2a, 0x10, 0x40, 0x00, 0x00, 0x40, 0x01, 0x08, 0x20, 0x40, 0x01, - 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x01, 0x40, - 0x00, 0x00, 0x01, 0x40, 0xaa, 0x2a}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/rightArrow.xbm b/thirdparty/xpdf/3.02/src/xpdf/rightArrow.xbm deleted file mode 100644 index 4ccb16b1..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/rightArrow.xbm +++ /dev/null @@ -1,5 +0,0 @@ -#define rightArrow_width 8 -#define rightArrow_height 15 -static unsigned char rightArrow_bits[] = { - 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0x7f, 0x3f, 0x1f, 0x0f, - 0x07, 0x03, 0x01}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/rightArrowDis.xbm b/thirdparty/xpdf/3.02/src/xpdf/rightArrowDis.xbm deleted file mode 100644 index 1216c47f..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/rightArrowDis.xbm +++ /dev/null @@ -1,5 +0,0 @@ -#define rightArrowDis_width 8 -#define rightArrowDis_height 15 -static unsigned char rightArrowDis_bits[] = { - 0x01, 0x02, 0x05, 0x0a, 0x15, 0x2a, 0x55, 0xaa, 0x55, 0x2a, 0x15, 0x0a, - 0x05, 0x02, 0x01}; diff --git a/thirdparty/xpdf/3.02/src/xpdf/vms_make.com b/thirdparty/xpdf/3.02/src/xpdf/vms_make.com deleted file mode 100644 index f4fb74af..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/vms_make.com +++ /dev/null @@ -1,129 +0,0 @@ -$!======================================================================== -$! -$! Xpdf compile script for VMS. -$! -$! Written by Patrick Moreau, Martin P.J. Zinser. -$! -$! Copyright 1996-2003 Glyph & Cog, LLC -$! -$!======================================================================== -$! -$ i = 0 -$ j = 0 -$ APPS = "XPDF,PDFTOPS,PDFTOTEXT,PDFINFO,PDFTOPBM,PDFIMAGES,PDFFONTS" -$ if f$search("COMMON.OLB").eqs."" then lib/create common.olb -$! -$ COMMON_OBJS = "Annot.obj,Array.obj,BuiltinFont.obj," + - - "BuiltinFontTables.obj,Catalog.obj,CharCodeToUnicode.obj," + - - "CMap.obj,Decrypt.obj,Dict.obj,Error.obj," + - - "FontEncodingTables.obj,FontFile.obj," + - - "Function.obj,Gfx.obj,GfxFont.obj,GfxState.obj,"+ - - "GlobalParams.obj,JArithmeticDecoder.obj,JBIG2Stream.obj,"+ - - "Lexer.obj,Link.obj,NameToCharCode.obj,Object.obj,"+ - - "Outline.obj,OutputDev.obj,Page.obj,Parser.obj,PDFdoc.obj," + - - "PDFDocEncoding.obj,PSTokenizer.obj,Stream.obj," + - - "UnicodeMap.obj,UnicodeTypeTable.obj,XRef.obj" -$ COMMON_LIBS = "[]common.olb/lib,[-.goo]libgoo.olb/lib" -$! -$ XPDF_OBJS = "xpdf.obj,FTFont.obj,PSOutputDev.obj," + - - "SFont.obj,T1Font.obj,TextOutputDev.obj,TTFont.obj," + - - "XOutputDev.obj,XPDFApp.obj,XPDFCore.obj,XPDFTree.obj," + - - "XPDFViewer.obj,XPixmapOutputDev.obj" -$ XPDF_LIBS = "" -$! -$ PDFTOPS_OBJS = "pdftops.obj,PSOutputDev.obj" -$ PDFTOPS_LIBS = "" -$! -$ PDFTOTEXT_OBJS = "pdftotext.obj,TextOutputDev.obj" -$ PDFTOTEXT_LIBS = "" -$! -$ PDFINFO_OBJS = "pdfinfo.obj" -$ PDFINFO_LIBS = "" -$! -$ PDFTOPBM_OBJS = "pdftopbm.obj,FTFont.obj,PBMOutputDev.obj,SFont.obj," + - - "T1Font.obj,TextOutputDev.obj,TTFont.obj,XOutputDev.obj" -$ PDFTOPBM_LIBS = "" -$! -$ PDFIMAGES_OBJS = "pdfimages.obj,ImageOutputDev.obj" -$ PDFIMAGES_LIBS = "" -$! -$ PDFFONTS_OBJS = "pdffonts.obj" -$ PDFFONTS_LIBS = "" -$! -$COMPILE_CXX_LOOP: -$ file = f$element(i, ",",COMMON_OBJS) -$ if file .eqs. "," then goto BUILD_APPS -$ i = i + 1 -$ name = f$parse(file,,,"NAME") -$ call make 'file "CXXCOMP ''name'.cc" - - 'name'.cc -$ call make common.olb "lib/replace common.olb ''name'.obj" - - 'name'.obj -$ goto COMPILE_CXX_LOOP -$! -$BUILD_APPS: -$ curr_app = f$element(j,",",APPS) -$ if curr_app .eqs. "," then exit -$ j = j + 1 -$ i = 0 -$COMPILE_APP: -$ file = f$element(i,",",'curr_app'_OBJS) -$ if file .eqs. "," then goto LINK_APP -$ i = i + 1 -$ name = f$parse(file,,,"NAME") -$ call make 'file "CXXCOMP ''name'.cc" - - 'name'.cc -$ goto COMPILE_APP -$LINK_APP: -$ if 'curr_app'_LIBS .nes. "" -$ then -$ LIBS = 'curr_app'_LIBS + "," + COMMON_LIBS -$ else -$ LIBS = COMMON_LIBS -$ endif -$ OBJS = 'curr_app'_OBJS -$ write sys$output "Linking ''curr_app'..." -$ xpdf_link/exe='curr_app'.exe 'OBJS','libs',[-]xpdf.opt/opt -$! -$ goto BUILD_APPS -$ exit -$! -$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES -$ V = 'F$Verify(0) -$! P1 = What we are trying to make -$! P2 = Command to make it -$! P3 - P8 What it depends on -$ -$ If F$Search(P1) .Eqs. "" Then Goto Makeit -$ Time = F$CvTime(F$File(P1,"RDT")) -$arg=3 -$Loop: -$ Argument = P'arg -$ If Argument .Eqs. "" Then Goto Exit -$ El=0 -$Loop2: -$ File = F$Element(El," ",Argument) -$ If File .Eqs. " " Then Goto Endl -$ AFile = "" -$Loop3: -$ OFile = AFile -$ AFile = F$Search(File) -$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl -$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit -$ Goto Loop3 -$NextEL: -$ El = El + 1 -$ Goto Loop2 -$EndL: -$ arg=arg+1 -$ If arg .Le. 8 Then Goto Loop -$ Goto Exit -$ -$Makeit: -$ VV=F$VERIFY(0) -$ write sys$output P2 -$ 'P2 -$ VV='F$Verify(VV) -$Exit: -$ If V Then Set Verify -$ENDSUBROUTINE diff --git a/thirdparty/xpdf/3.02/src/xpdf/xpdf.cc b/thirdparty/xpdf/3.02/src/xpdf/xpdf.cc deleted file mode 100644 index e5d91ca9..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/xpdf.cc +++ /dev/null @@ -1,344 +0,0 @@ -//======================================================================== -// -// xpdf.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include "gtypes.h" -#include "GString.h" -#include "parseargs.h" -#include "gfile.h" -#include "gmem.h" -#include "GlobalParams.h" -#include "Object.h" -#include "XPDFApp.h" -#include "config.h" - -//------------------------------------------------------------------------ -// command line options -//------------------------------------------------------------------------ - -static GBool contView = gFalse; -static char enableT1libStr[16] = ""; -static char enableFreeTypeStr[16] = ""; -static char antialiasStr[16] = ""; -static char vectorAntialiasStr[16] = ""; -static char psFileArg[256]; -static char paperSize[15] = ""; -static int paperWidth = 0; -static int paperHeight = 0; -static GBool level1 = gFalse; -static char textEncName[128] = ""; -static char textEOL[16] = ""; -static char ownerPassword[33] = "\001"; -static char userPassword[33] = "\001"; -static GBool fullScreen = gFalse; -static char remoteName[100] = "xpdf_"; -static char remoteCmd[512] = ""; -static GBool doRemoteReload = gFalse; -static GBool doRemoteRaise = gFalse; -static GBool doRemoteQuit = gFalse; -static GBool printCommands = gFalse; -static GBool quiet = gFalse; -static char cfgFileName[256] = ""; -static GBool printVersion = gFalse; -static GBool printHelp = gFalse; - -static ArgDesc argDesc[] = { - {"-g", argStringDummy, NULL, 0, - "initial window geometry"}, - {"-geometry", argStringDummy, NULL, 0, - "initial window geometry"}, - {"-title", argStringDummy, NULL, 0, - "window title"}, - {"-cmap", argFlagDummy, NULL, 0, - "install a private colormap"}, - {"-rgb", argIntDummy, NULL, 0, - "biggest RGB cube to allocate (default is 5)"}, - {"-rv", argFlagDummy, NULL, 0, - "reverse video"}, - {"-papercolor", argStringDummy, NULL, 0, - "color of paper background"}, - {"-z", argStringDummy, NULL, 0, - "initial zoom level (percent, 'page', 'width')"}, - {"-cont", argFlag, &contView, 0, - "start in continuous view mode" }, -#if HAVE_T1LIB_H - {"-t1lib", argString, enableT1libStr, sizeof(enableT1libStr), - "enable t1lib font rasterizer: yes, no"}, -#endif -#if HAVE_FREETYPE_FREETYPE_H | HAVE_FREETYPE_H - {"-freetype", argString, enableFreeTypeStr, sizeof(enableFreeTypeStr), - "enable FreeType font rasterizer: yes, no"}, -#endif - {"-aa", argString, antialiasStr, sizeof(antialiasStr), - "enable font anti-aliasing: yes, no"}, - {"-aaVector", argString, vectorAntialiasStr, sizeof(vectorAntialiasStr), - "enable vector anti-aliasing: yes, no"}, - {"-ps", argString, psFileArg, sizeof(psFileArg), - "default PostScript file name or command"}, - {"-paper", argString, paperSize, sizeof(paperSize), - "paper size (letter, legal, A4, A3, match)"}, - {"-paperw", argInt, &paperWidth, 0, - "paper width, in points"}, - {"-paperh", argInt, &paperHeight, 0, - "paper height, in points"}, - {"-level1", argFlag, &level1, 0, - "generate Level 1 PostScript"}, - {"-enc", argString, textEncName, sizeof(textEncName), - "output text encoding name"}, - {"-eol", argString, textEOL, sizeof(textEOL), - "output end-of-line convention (unix, dos, or mac)"}, - {"-opw", argString, ownerPassword, sizeof(ownerPassword), - "owner password (for encrypted files)"}, - {"-upw", argString, userPassword, sizeof(userPassword), - "user password (for encrypted files)"}, - {"-fullscreen", argFlag, &fullScreen, 0, - "run in full-screen (presentation) mode"}, - {"-remote", argString, remoteName + 5, sizeof(remoteName) - 5, - "start/contact xpdf remote server with specified name"}, - {"-exec", argString, remoteCmd, sizeof(remoteCmd), - "execute command on xpdf remote server (with -remote only)"}, - {"-reload", argFlag, &doRemoteReload, 0, - "reload xpdf remote server window (with -remote only)"}, - {"-raise", argFlag, &doRemoteRaise, 0, - "raise xpdf remote server window (with -remote only)"}, - {"-quit", argFlag, &doRemoteQuit, 0, - "kill xpdf remote server (with -remote only)"}, - {"-cmd", argFlag, &printCommands, 0, - "print commands as they're executed"}, - {"-q", argFlag, &quiet, 0, - "don't print any messages or errors"}, - {"-cfg", argString, cfgFileName, sizeof(cfgFileName), - "configuration file to use in place of .xpdfrc"}, - {"-v", argFlag, &printVersion, 0, - "print copyright and version info"}, - {"-h", argFlag, &printHelp, 0, - "print usage information"}, - {"-help", argFlag, &printHelp, 0, - "print usage information"}, - {"--help", argFlag, &printHelp, 0, - "print usage information"}, - {"-?", argFlag, &printHelp, 0, - "print usage information"}, - {NULL} -}; - -//------------------------------------------------------------------------ - -int main(int argc, char *argv[]) { - XPDFApp *app; - GString *fileName; - int pg; - GString *destName; - GString *userPasswordStr, *ownerPasswordStr; - GBool ok; - int exitCode; - - exitCode = 0; - userPasswordStr = ownerPasswordStr = NULL; - - // parse args - ok = parseArgs(argDesc, &argc, argv); - if (!ok || printVersion || printHelp) { - fprintf(stderr, "xpdf version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("xpdf", "[ [ | +]]", argDesc); - } - exitCode = 99; - goto done0; - } - - // read config file - globalParams = new GlobalParams(cfgFileName); - globalParams->setupBaseFonts(NULL); - if (contView) { - globalParams->setContinuousView(contView); - } - if (psFileArg[0]) { - globalParams->setPSFile(psFileArg); - } - if (paperSize[0]) { - if (!globalParams->setPSPaperSize(paperSize)) { - fprintf(stderr, "Invalid paper size\n"); - } - } else { - if (paperWidth) { - globalParams->setPSPaperWidth(paperWidth); - } - if (paperHeight) { - globalParams->setPSPaperHeight(paperHeight); - } - } - if (level1) { - globalParams->setPSLevel(psLevel1); - } - if (textEncName[0]) { - globalParams->setTextEncoding(textEncName); - } - if (textEOL[0]) { - if (!globalParams->setTextEOL(textEOL)) { - fprintf(stderr, "Bad '-eol' value on command line\n"); - } - } - if (enableT1libStr[0]) { - if (!globalParams->setEnableT1lib(enableT1libStr)) { - fprintf(stderr, "Bad '-t1lib' value on command line\n"); - } - } - if (enableFreeTypeStr[0]) { - if (!globalParams->setEnableFreeType(enableFreeTypeStr)) { - fprintf(stderr, "Bad '-freetype' value on command line\n"); - } - } - if (antialiasStr[0]) { - if (!globalParams->setAntialias(antialiasStr)) { - fprintf(stderr, "Bad '-aa' value on command line\n"); - } - } - if (vectorAntialiasStr[0]) { - if (!globalParams->setVectorAntialias(vectorAntialiasStr)) { - fprintf(stderr, "Bad '-aaVector' value on command line\n"); - } - } - if (printCommands) { - globalParams->setPrintCommands(printCommands); - } - if (quiet) { - globalParams->setErrQuiet(quiet); - } - - // create the XPDFApp object - app = new XPDFApp(&argc, argv); - - // the initialZoom parameter can be set in either the config file or - // as an X resource (or command line arg) - if (app->getInitialZoom()) { - globalParams->setInitialZoom(app->getInitialZoom()->getCString()); - } - - // check command line - ok = ok && argc >= 1 && argc <= 3; - if (remoteCmd[0]) { - ok = ok && remoteName[5] && !doRemoteReload && !doRemoteRaise && - !doRemoteQuit && argc == 1; - } - if (doRemoteReload) { - ok = ok && remoteName[5] && !doRemoteQuit && argc == 1; - } - if (doRemoteRaise) { - ok = ok && remoteName[5] && !doRemoteQuit; - } - if (doRemoteQuit) { - ok = ok && remoteName[5] && argc == 1; - } - if (!ok || printVersion || printHelp) { - fprintf(stderr, "xpdf version %s\n", xpdfVersion); - fprintf(stderr, "%s\n", xpdfCopyright); - if (!printVersion) { - printUsage("xpdf", "[ [ | +]]", argDesc); - } - exitCode = 99; - goto done1; - } - if (argc >= 2) { - fileName = new GString(argv[1]); - } else { - fileName = NULL; - } - pg = 1; - destName = NULL; - if (argc == 3) { - if (argv[2][0] == '+') { - destName = new GString(&argv[2][1]); - } else { - pg = atoi(argv[2]); - if (pg < 0) { - fprintf(stderr, "Invalid page number (%d)\n", pg); - exitCode = 99; - goto done2; - } - } - } - - // handle remote server stuff - if (remoteName[5]) { - app->setRemoteName(remoteName); - if (app->remoteServerRunning()) { - if (fileName) { - if (destName) { - app->remoteOpenAtDest(fileName, destName, doRemoteRaise); - } else { - app->remoteOpen(fileName, pg, doRemoteRaise); - } - } else if (remoteCmd[0]) { - app->remoteExec(remoteCmd); - } else if (doRemoteReload) { - app->remoteReload(doRemoteRaise); - } else if (doRemoteRaise) { - app->remoteRaise(); - } else if (doRemoteQuit) { - app->remoteQuit(); - } - goto done2; - } - if (doRemoteQuit) { - goto done2; - } - } - - // set options - app->setFullScreen(fullScreen); - - // check for password string(s) - ownerPasswordStr = ownerPassword[0] != '\001' ? new GString(ownerPassword) - : (GString *)NULL; - userPasswordStr = userPassword[0] != '\001' ? new GString(userPassword) - : (GString *)NULL; - - // open the file and run the main loop - if (destName) { - if (!app->openAtDest(fileName, destName, - ownerPasswordStr, userPasswordStr)) { - exitCode = 1; - goto done2; - } - } else { - if (!app->open(fileName, pg, ownerPasswordStr, userPasswordStr)) { - exitCode = 1; - goto done2; - } - } - app->run(); - - exitCode = 0; - - // clean up - done2: - if (userPasswordStr) { - delete userPasswordStr; - } - if (ownerPasswordStr) { - delete ownerPasswordStr; - } - if (destName) { - delete destName; - } - if (fileName) { - delete fileName; - } - done1: - delete app; - delete globalParams; - - // check for memory leaks - done0: - Object::memCheck(stderr); - gMemReport(stderr); - - return exitCode; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/xpdfIcon.xpm b/thirdparty/xpdf/3.02/src/xpdf/xpdfIcon.xpm deleted file mode 100644 index 5e05d20e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/xpdfIcon.xpm +++ /dev/null @@ -1,62 +0,0 @@ -/* XPM */ -static char *xpdfIcon[] = { -/* width height num_colors chars_per_pixel */ -" 48 48 7 1", -/* colors */ -". c #000000", -"# c #a00000", -"a c #a0a0a0", -"b c #c0c0c0", -"c c #e00000", -"d c #e0e0e0", -"e c #ffffff", -/* pixels */ -"................................................", -"................................................", -"................................................", -"................................................", -"#ccccccc#................................#ccc#..", -".#ccccccc#..............................#ccc#...", -"..#ccccccc#............................#ccc#....", -"...#ccccccc#................bbba.....abbbc#.....", -"....#ccccccc#...............beea....debbed......", -".....#ccccccc#...............ee....bebccee......", -"......#ccccccc#..............ee....eecc#bb......", -".......#ccccccc#............aee...#eec#.........", -"........#ccccccc#...........bed..#beb#..........", -".........#ccccccc#..........beb.#cbeb...........", -"..........#ccccccc#.........beb#ccbeb...........", -"...........#ccccccc#........bebcccbeb...........", -"............#ccccccc#.......eebcc#dea...........", -".............#ccccccc#......eecc#.ee............", -".........ae...#ccccccc#....#eec#..ee............", -"........aeeaeeeebcccccabeeeaee#.beeeeee.........", -".......aeeeea..debcccaed##ceee....ee............", -"......addee.....eeccaedccccbed...beb............", -"......a.bee.....ee#cbeaccccbeb...beb............", -"........beb.....ee.#eecccccbeb...beb............", -"........beb.....ee..eecccccbeb...beb............", -"........beb.....ee..eeccccceeb...dea............", -"........deb....aeb.#eeccccceec#..ee.............", -"........eea....dea#cee##ccceecc#.ee.............", -"........eee...dea#ccbeda#cdeeccc#ee.............", -"........eeaeeeba#ccc#beeeeaeeecceeee............", -"........ee.....#ccc#......#ccccccc#.............", -".......bee....#ccc#........#ccccccc#............", -".......beb...#ccc#..........#ccccccc#...........", -".......beb..#ccc#............#ccccccc#..........", -".......beb.#ccc#..............#ccccccc#.........", -".......deb#ccc#................#ccccccc#........", -".......eeaccc#..................#ccccccc#.......", -".......eeccc#....................#ccccccc#......", -".......eecc#......................#ccccccc#.....", -"......beeb#........................#ccccccc#....", -".....#bbbb..........................#ccccccc#...", -"....#ccc#............................#ccccccc#..", -"...#ccc#..............................#ccccccc#.", -"..#ccc#................................#ccccccc.", -"................................................", -"................................................", -"................................................", -"................................................" -}; diff --git a/thirdparty/xpdf/xpdf-3.02/lib/linux/libxpdf.a b/thirdparty/xpdf/xpdf-3.02/lib/linux/libxpdf.a deleted file mode 100644 index c25ee832ff248ac0291b9f6912ee30a55f7919c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2114500 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%0A`gW;$F!!CS7 z*O#G-->{3@&_>j#P}PE=mE9#76?SYK-*McfvW=fZ<|q||D?O6(YoC6HPq@gK3pGHW z0WBlLX*FgG*fIevgO<#28?ta z=$oK#fxZX&A!r}yNl+K)DbRDEmq7iX--BKOy#^WtodW#<^akin5cdxL1N1iN9nhaa z-0#J@1QsT+_6HgT8Uq>&x(vkq1rO*7&__WZ1AQEH9q2~T=Rt*_+dy}Lz6e?YssL4j z{GipK0B8-U4%7hRzC$x81md2G@LEixF2K{%r zevGvI6!de@G0-nTzXJ7xPJ-S9{U>M~)-)%8J`0)w$^r4Z88`&ktge*MZ?1$f zdxWs&;n^b463`tZxHHD;Vb22&z6tm1L9L*$f_q-_uIe}bL{{R%Vy zItLo-M%{y)?Vq}GJ)UKQ@<7F)J3*^KK~O7b3up((YX9HE{S%;Hfc_1{>m=|k(0ib< zqtISK&g+v7{(9VJf^G)+9M2cw{ti&3JgWm*I@*Z)AZVSqJq-K?=wCpGKs}&mLB9l@ z0R0~HI_OQ%dC&#WXc)=MLFu4RfIbbH44MX-1^NQW2Py_F2Hgp&0M&pRKx;uQAQQ9= zv;*|t<@zqt@&u^Mk)~eUp8%Z%oddbX=+vePlKX_?{(9VJIrx0smw=W!p3zSg_y*8D zpa|$|pnn4W0Q4lN2hHgYcqT?P6aXeP)9DgoUA@`LUMJplT9&^JK4K~I2qp@{$gJ{b1ozq$|pKk561 z_j`Y-&trf0m-;%ZpBvuCv5#W^G`v4z-^2c9ct687^E2qy)1YTSFM-(ZehqvD#CCWJ z_!j6rQ1WHEO|qSh#eF*HYS5=ZYI*+?-#5I^ z8>zozA2+;jbM|TM&z$|(f0sVY*>{Z8XRyCuKVkI`&VJ#8>_6@P|JQ8&HPEf=K{tVB zf&LEU11$h80+oZ7gQ`GZ1{r_FS?~`!Q~Xz*C&qad?5ibC`VKqHi&TB6i|1Hj&Q-rg z5BmH8@AM@@KQ-T^988$H^6;1EJgmzrH`fEvW!rMotN_H_VyA#-cv3h`zrmkK8FWWs?yDJNt1gkuN2NhKEB5rxvcOk z-a_Z|i_c*?U722IO2|87ByZJ{4xQ%~o!7v=Fykk=|C23q{r@7!}+s z*eAFpI|O$M z?h@QBxJPiW;6A~Ff`e73>o{E_gz)UvNP1q~K}6GlFLY&kMGpnX(+B zf|~`~1-A-r7u+GZQ*f8yZb7a=F}%Hk`veaP9un*lJSuohuvhT7;0eKg!2!XOf~N(~ z2%Z&uPtXl}#Pp;HrV4Vsi_g;qIVT`LQP3+mNs#Mdbk7#d5#+pq&uRCFZGxKxcM9$j z+%3rQFXg)g`vm(12Lw+Fo)+Y~kBUbyD%dW#RdBl?*M}&-Q*f8yZb80_LifFb`veaP z9un*j>=HaG$ah8PzgMtNknd>l`3b>(!2v;z)9HR%@QmPD!SjM#x1t>1#smkBNxTq#&3SR+^~$h9w~hwER&4T7zLZGut3&4TTM zTLrfZ?hxE5xJz)i;2y!fg8Kvy3LX;d5bP2>DtJt=SFlg;xZnxFe!&63lY*xO&j_9s zJTKVB^(@>+1vd+B7v$O;-FFJ^65K7gSMZSFQNd$^#|625#&G%t&j_9sJTLg3pn*9L z<=uiQf}BI~d75ClpjR+MaFXB@!D)iof;ob-1@i<81m_7B3ziC&2`&>{F1S*VYY9wW zjbN={qhL^Qo!|z+R>3yGsNiP7cEPQJ+XZ(B?iAc5xLa_K;9kLff(Hc;33do}2_6+Z zCfF<3CwN@&gkZnmfZ$2N(}HIN&kCLwd{2<$R#o4EDT1kjX@cp369gv;dIkB)G{c!B zI7M)pV76e6;B3J>!2-c~g2jTRf@Ols1i9AA_*M#53DyYK3N{J`1=k5~5Ns7}6O0OO z7Hk*XD!5&6hu}`ZU4pv>_XzG4+$VTY@Q`4KV3*)g!DE8Gf_;L=1y2a}3l0dL6g(|> zM)0iQdBOJtIYCqPFPI{jDwrmiE;vDOqM%nWLvWJd6v1hN*@8KOvjy`63k2s077LaN zmI*EsTrRj$uu8B-uvV~9FetcAkZbD9cdKBVU{r9kV7uT}!R>-O1a}JV65K7gM{uv; zKEZ>6hXgwWy9AF49uw>p>=QgLctWsWa6s^+;Az1#f@cNK3%)1FMFdsQjf@y;3 zf)fNM3VH=I1Sbhj5u7HNEtn%XTQE zHwd;0wh2ZBHw(54ZWY`vxI=KK;4Z=4f_nt_3hom;D0oP)L$FKmsNgZdUco-W-O1a}JV65K7gM{uv;KEZ>6 zhXgwWy9AF49uw>p>=QgLctWsWa6s^+;Az1#f@cNK3%)1FeJ54_f+>Qjf@y;3g4~;; z{6s;oV20o%!6|~%1hWNm1ZNB82^I*>6D$@i6)Y26CdfSsremcb_bbTP2-XTV3I+w& z32qQ<6>JlX3T_r`7u+hiU2uosPQhJ*y9M_M?iJi8cu??=V25Cr;8DS2g1v%$g2x3< z2=)sO2%Z!?EqF%otl)XU_XPPt3RVAtDT1kjX@cp369oCbXjxOp&sA!EJI#JyH1iVQ zO`D#bo#W;8m){p%*@(qfT-oaHB)r>sje%u2113vhnjqhm<#T=sfjB{s`##PK-%(n^ zk0#+uS%q%%Hg|4sFm*D&&}Du1YxE5+aItg4znk_&)3_l?zKg~0unpnAXy$qKcgzqz zKf&dL`|T6s?pD+Nz|V($$7!g0!2|A#ztgr9-|#{*Q_Xqa$Wt3XWtL9N?9id)W`#!O z-s=u}!X2*gk@Vco`~PqdA78t`k9Mi=aAkJHURk;%eA&w<(eeAyMQ&etY%zM2-#p5-~P;fmz=>@V}k-qS2?}gt@3Vtf{T=?DO;PsvZNX+jhjD5@18}4$eZ-_BHnJ*w5 zj|)MMeeu+^fW_GEM3 z1eCx6&jH^_q;S)#JY(rO@B+hockEmElv%7BlAB)T;mfganT_e09l2MAK6>htR()!>Wf?W5?Wcj{A`bpi@^pe zmLK^tm!z8o4^Wz)-@@0w^as3-n7*_44p+vxBPm?MHA2^%JL2B!3QY+AE-C!3>#B}$ zmp9y>d>6k9$2CI(JQ?|p+R`P9!>5-+g&d#yGD}jBf(19{ds}>nyt6+kIe%i0k1N-P ziLU^b_u&I;;dkAhwtrxF?~V>mjl2-L+6<*d&aL~XnU@+qIXc&u=Gn}(Z&fcy#PYk8 z)*OHjeDAI=9vXQV^oOdNayRdCXY}+B0L#WI30#o9Hm)=-;2U3X74PHqP39*i3B^gh@GM>E@ zfhrHjkTW+!Rn>>0$i?>=OS(LpWA9(M5a|eQ@I2u=R-NoaDGfwk@I-=mJXnW6`a6gv zy>WL|tf%vhYg|3CViae|vF9%!0de{qG)Bw^F+xpd`U5$p5pNx8N3T&s`fdwfh;#$ zQbhIe)w+w@NrAaEot7{7KnjwA5>!ch^HAE9~oa<=&IAv5o4>5<S}97q1@s^LhnCjZVfYX z$hys<*{GIS`Cb(<5`iTZod~mhFO-%tR=uf4f=8@PUEpMJIawGXX(y-wY;qwXD+rc+y_Y6f3IOtka8 zRtBuS$}QEE!5}OXHO$kt3NrwHqZ9Iol-W(lhEl>^#j5wa zWl>q#BF|QS(ll0>myi#4xD#HM6hJWwCj_5n#OVm#DjIVkMklc&vBGrEmQ#2R1;hBO zr9aja?o5q=dFs^VdYlvX4Wx0n;Omc-9AlrRk^~zwkcb9P-Jgd9i z2SyZ2j6zt`a}fTBVyVtZ(Zj^%FmbMTP58JyEuNl+@4b$?c}eQVF(`NzC%zUN?n%#G zIKlHs7VMPS(r*?Purcg|w!|N$NUZ#X(ln`HI7Y`{aFggCtg5HWAFwqWHRUQ+1qFX_UKW<7dhzh0P5!&s1%VyTF4Al#AY3r$_? zUQb&u8~jBzkC8cRexhd!$D~s81FU&>tfU_`KStT7B@Yrrf>)1&Q-L~&3!oPbT6R-F@m*e1}iEP=;(#JRFtzf?3i>^YhZF*$|Jr533f&zNUO2 zx!?+xjh%4JCq~^|=xE|SuH20o8=8?yvv3jys)uPjkb8Fg?!O!E{nXFYc$Ediwt*!i z1EFgZtCivF@1i5|4Gi7`Y!^GyJ{ShqQ|M*F*ggiILE{Ql#AACHVc&+|_o9)7zJvbsrP!G# zT}f%JZ@(Tp(|P`y*qg4mI^Xq7J`#ALA69Ad^PAr30D9W^8f0!u|Av~_dCWY6IX{DC zHZsrYEKKe}S7nVWU*l%#Y0z<4LgKc)m-Q3cD|Gy3{gmw9gJ;}HfYYT}@uZ@R!mD^FxCt!a6>P9McCw+cnY zW)-p7k}kP97b_o-@8|Oq zvZ$iazdXRSd6_ofK9n4WzgT37`3^FpzP)TZzCHebQX?fFMnukv*`sp2cgQ1#=3!`T zaPYnl%V`{3@C92f_$2$-nD3By^X;~7c3C$&Po+_x!mqnvVLWYzAaAzd)AydXmwAg6 zy4z`RyMiaoP}fg5c`{oL{pmZwXH4Hg&lB0Dm|kMVVc*S-87)tmzTL6%9ZZ&`y{1nR zZu+{c(uG!|YP)n}ww-sWT9*pI>J*hag`Z?sZC=D|4Y5pS`3^~Wq!7hl-7eYEewYv* zz_!X~z(0Ky3paF2xNC!IbkN_O@eoxsO%l#oFrrL+ls*v?=46BC(f(9@S`|HH{JrV) z2~|GMDmOzD%%$kvf~lLj=&IvQq|+MF$9zXSPhJy?Y+&29&8g)|CtvR+p0{4&c@zcU zW`@inEEw6^9g8%M7zfrLdVEv>4)!?e=<#vc3;Kh#krSK;7O5_iy`#B}VZ_d7KE;{p zvoNSfP6hC@5gZh&)t5dr^tk&+ti9N_JjiN;pl)MDZfMPoW|8|R4FBe$v!0TYLoxjC zykXH<3=2v+HhRMETz3DsSP_;Ed2ZE+%|iRc>Qio0#)i+E3noRL3O!0QPbER;&B*Q^ zF)~*NqC547Wv7wam&`>Ix-lT^@pT|z1M8%j$T}w=efZIXeV^sS@V#lS@JoiQ79S10 z5o_tdG!9E)7^iH7@m2NI6RAPYDBt7TO+fcwVJ@9$7J1DDsrc;(ETy68Y@EU)xR`!# zHe0$_Ufu2H9B=ZRiMgGg;-kzLR;1q#oiZU1>cR{p?*0mwDvQ!@n3r<%ytG)H(RjY8 zW?N{(dIAuyVhwN(V6Q81y(C4JkvM9cjcWfiOGOucNpB`5>f2F`xxVe59Y;{o+e#U7 z+pU+OO3M#%4E7l)Oi!fP%2#BieYafh%o6BHJG0y4+f3lRf-mB0d#&O^u2Jy5wq##d zyuc_5_rDkOwOa0{X4g`+`ZlDi92fMZ?Vh2z}ag_n)x zQbBiNDwf4djz$+=9&S0B63+o0R^fQh0To_!i3c54=lPUqVH%|Sq6@FU0!-wE zjg!st&Cr|BR#aOuRt47@-E(Hbf9e=0PISSn@R6k4ZqzFTd~Gf+xnOVMsN18|#?<*x z>5rW2@oi;ddwgvKPur_x+!<3amQV%Cnrp*&syh#5lZUd&OLleVp=|O-C3oi`hk0Yb zBZqloLE}J|rFQ3~0xx%W=Z#P5&hvP?^U}ay0s08&qj;VU{21^`;K$*A0`Mx()u2yY z=+2u6`XuO6;I9FBLDzyljc3<^GI0MH&}Tu{!~Z1UWQ6xQ;0*@K!*if`i7Q%MI>qxu z>Js3M_z9Iw@2Vbi09j`C%m{T5{Z@nr26`f_PnJQCZ@U6j8TyVD&pT8?FSa(K7|uoG ztZ}m>8jY|$#QCc-+h{}0IR7RWO^B99p*gK_H-=}eQSHWcVb|nd*j#F$>Tsp!>G3J0 zf&Q9B6OgDa&q1+a=U#xNdns1Z8VhyAB0+?FDvSMQ8&rQEQe>(o8e5nahG8-HQvmb9 zu&))XQLVX!6FgfUU<27k2Xjuk>%2J+zc#b+m#|$>rFd#Ap8c?y5*yEf(h@g*A1AgD zgQiq7P7kpqsb*eUtT4^YPsftDS(cMx7U!nnv9h%VIeP6(CCh3_EYEK;VWVNTZfUHj ztMqK`#NNi2T3dEw#8kj^=mtN3G^9$>x!V6jj3!KF5;!Z(gv>1!{+b$3+ZY&yTh;~Z zYCMro(5I>-BuJUxZESgiCj3^nw>=g7N3&!r3PL5#*GB83vke=qO+%r3@I`c^di*t{ zM3kR-SW8K9J*~!zL$V~nV1*4^kSxPZIaNrWCo+Lal8z@Y1@R2oYANrXd<11W_!i@g zy={g%T3ezcO~@v=x(oR(I=R zsvruL2a;P4Q|-X;Ey32q)JZVEz&tM=&O?15V2&-+z#F?Ns(7%ND`jJr9EJJsd>Kn2 zeOL;^@>$8TjWc2`y7_-R^Y7rQaT4G zL>HtI)1nJ5C#FOfj5qPe<2f*IOmsn-=ZSfvqYJLUWKg+%1UJzIANBln-eu7R>7Jj> z8y8*hF|@4Cci`tr+(Z|A9F8B2E|>tvk3<(-g*K@iuf|QdBR#s{6X7Fix#vRt7xJ&`Zr5gUOg;-&#ENxuc3->Ua)RgTxTnc!J`vPbQ+zWW*br=9s87sTF#miV;sj~hOYP04SCWa@HaIVYQ zt&_W~dMveHjeliw;27CUx=?^^k1;+e510}zP++!)x!Oy3%8W$5fY_NrWIz(RPOH89D8 z^N==2{(hT~$FOXW9Ygyq75F%0@YA_frqbQmlC;=D_u%pKc%V$X zbclHw;d>{!Vv%em$-mg_?|&b54OY$b!%lX65jF%^{=vuKyWO(6ZFeRT5f8T_(Sw`_ zws#kf$6(Jh-Z5_T^+gM>Q2p)Zc)=Aj%||iXzykev{K(p)Y8H*31bp)|1$}5pUZwn7*4BhpS1`<`3-L+NE<4k13j(R_eJUCLg+YFK_p3`4$UuKlKYrtk<{N%|@(2 zZLH-_-(iJDkA&i>DY_leuEgTA;XyY?bsIZ^AMHa4UJXkCyV8w*;{)0O*X7KTb~8U! zwMBjz2RTwhwoq%>*PfPpcZTN??pvEGWiUUi-?_-S)vvdm#d53NWSC2(4T)Ah_%TQ` z4Qky4C6b?#Y?(%F3NTt-jwmqaP;5x?-QkYZV?Re^@n3@^HiyuhRvkl#tu%4yTAMW8Mn3S`lj-XZBqgUc@ zUv!Dflt$C}Zc6kDY>q?=lac3ew>zvFrb`>=+|rEuzo(NK>%p9iwLW;?TS$aj2j;p` znI6(|rAd{ET3@n@WoZUx%AYaS!_23o|1eAOgR8C^Fx$Z-XDJ5kX}M3||GF7xuiE)L zcRV}|f%Ozz!Tk{is>aNW02K{e!&uQEbh#I0B-SgilQCO|!k_JoVQH^h+0WQ*Dap5` zVh;$b_@l5%H2DYu;>t@W1{W@VbUXiWIJTBV4>k1wymDni>EHb3VXOaEq8s!#(=p5^Ms9mG_h2Q6_sRYEgGKF z96Rb?E2yq`9JTuieQ?OtgV8CDy>QHwC|9K(E|oMybpO|4&!JfkzW)a#$kD;*ob@De za7Y8SL|53z`J9ucoaeX){|F5l8q7*~>`7uT%V4}85DX_>J#*5O2!i@5gMw|n4T|Q8 zE~BlplnvW(p;nHIo{M44sr%Gi&rb_4i~0sUKPwy;^}S*irqIUtUd2t+_nK{ARTt?P zfx@)v^1e4?!wg21&yBtxEAL|w9B!UJkMI}(GzSg1-7(xN?>KeX47E!Ck&Lkf$7=~q z@}hy|0*SKZ0Qvr?c|XJT3evZ14cyJ+au$URbc2DwJE zWw=?+)it-Q9>|cDW2Y~@0h7nxw0t*KCsi6{Z^qUY2@kk%kYv_zgJ;UJzJ+oFVc(57+ z8a?D>395dD<9LW%)Kcc8DQ8ssCS+L;`RIuqEE9VPPs$mdCclk@S%tJ4Tl(mZ2Xj#+ ziRu_ELEnh|oABvLG5pdjPPKmVEPfAHrBv_Yn1y+${`4U~MJsmA(avRV5TD(OP592& zlCb7enx+~Y)+mN-CvnKr7?$@}ksyyI_o%Qqzdq=kU8x6M$ zrS8Ex*a+wT(+8xVyY2rkNPo_y%AZGB{!7y@hfFX_n}C8(V}+nk`k>la!P-Cvk=P&N z?<{M5YI%+ObA3S5nP<{TFV>OtpXT9+d^XAAOlkESzZHZk!#t5KKecRxUP56GN)C59e<~ zUwmdxuW0=jq-RL&jgSu1r`VSvI`IEkd3?C|d0gHLO?DbK7(3BxWp7}-9fn5LQcodQ z%Z;8wz9|BjNKjQLr&D?gXKR-Nf>kwgR3C3pSWj@+->Tkr^*#aZ)$sCw-Ni&>9s*LS zgrV01!fu|lOr^HM^g}6a)l&zmf>&JhJK^SNoM2FP^3?Ayt`T{k;lEpX%tLwLD7d47 zm``SxKhF+zu?i4Fxg04c4E}UmDDPuwVPK)pOQ;f4r`}LvT0))vymDAkS>y9WdHv=R z<%RP=n@;mvI;aV(GWg9~)ILhfKqdxuX^up*3ypBB633C=$PO-09OhpPXyaRfKf#`x z5!<#Cw}1K{dR7tJb{rhXFx|dRSGVt%px?V})zRnTHeeQt%*@nkMnk3|Mb~^SP7V2| zU(WP+B6(Qc+0?~^I?mZ7Z%i@A#C#894?5=C!c`RCSGc6&`zrfk-(zMGPGtNewt!;3 ze>RII#(dwwo^H(deNI1oKQN0X#e9#OMN?wF17^{*nD0r?6GhqGzHJ7^LZC;na^(AI zx9=-lf6zPdIHl&;frsKo`jEqfS=Uu!ANcEu9K|}4s=Y`*1aZoZ^N}ZzBQwqiaV3B$ zPGo>3bq4x?LsPN%32>+8x10JgjPkaXbZ0YB0lCg6+De>BFh$@e*i%t6q8`lu7)ny^ znGN$yB@@g3iQaPGZK?={ht5rCTdf?SVhgz7C+<_l6r?GGpy!L`Hb#MzBxZ|+8R(dX%oaChL@unmNsDGaWxda( z_ES=E3iUPFPdRUH%urh@X}Qm}yd2&*iSHj_5};NkS%g-CW0CDFMb^){yE8jZ-K^)E zFLhp+5PQcwOvh;IL)bQXCoNk1kShj<6x*Trp`>WpL&->BZehlTEOXKVuEiqz|cHEu%nC#>9 zq=c1|D|}%Yj$Rbca$^WJXtrHL|K>L3o4Jx@nMlX_V`2EYuq^biX88nD1<#pr7%#nJ ze6o$v#7iEIM()E+Ph_*i+7n^JW&FrM_(&>_4sDC#iFufR%v2}t{-AABc9!gy~WN~lU!%ab!jjvDW=*| zOtc#1sVBnI%}gIWMt*?l1&&Nb7a%D*a&zA=7@_CD=xAg&Bs~Wfx}xzO+?jFa(sQ6N z$@R{;&g7_SYhaUOs$B=MF5=d=v3J5RCr?&S&HXG^9JUXua&d)KF}vca2RsM%Gt|zP zlVb5QB@<_SSd{2|dBWJEo&&1Ejy==)a!Tx39k;yocgEaL54z+oi?z)-4bD{gifx{8 z7EJ8WjQ0p_GtK}!Z9I2k9;Wq)sjAXmu_1E+1*e(Op2*!WTwKnFIWhNB{ja(Ze(im% znL%egKRnMO-vF;-xE8)RrLKVsn~u-Xysc~^JSh$2xC*MnI5G8mhgz( zk!Rt_=#D%`%NdRQD}zuH-H~4H^1Ox@2;q|{o&D~}3*8Z(sf4#*0$RHx+?oc**Ey2A zBge@_BfkQ8+J1>@HV-qd_%;?+Ow~#}@^5gBZDTUysXtRSLH%<*AA7dl92a}8^Nk7G zF0Omrol+Fu|7{@9b6rDHD_IR1OAPw8cBl=Ap;`eg#i^DMzDc-3~%YDleNkg6JcCOWx zH61_9N@3q@b>8u9R3>Sn+gKc?F1q4zI4D3qrkby|TgiBpHa++0(A!UP#}pg+*gu{S z^?iky7WF+!#L~@HGqRNhTfPm=v26?{Q;D9{jO>IHM+&Mt#s1s2T`E@kFynMI^=j!H zx2%6@iIIXxrbV)Y(4N)U##ClbWwaQF3DE~}s&8f5j8kj41yhL-;&C=BoHbJ;>UjCX zI>#~H_SDd4Q0;N9HNv!M_rQm>-xCG&@@W2kA9+*c(ybl!0-haiA;3^12GAD!VVQ(y)J%xv+oED#1SMf&5W~(P>Et$PVJco+rNx(iU=%Fo25Mq&3o}+T1^M9MWT6bpNFJS{ufa8H>nyP z=ZTzycpH@IkM!nfBx?0*+h#mv)h61BXl`7&$a3Z2k093W^lhq^VW-aF-D+loE%c+t zjr-ZI6D^p&Ff!nLRGPmUnOTE4Qw=Ds>D1uiKf$kBz2FN&aVicItcxFmT}MN+_B5AZ zM9&t+_Nn%W)mRkAbyQD@qhoKyp5=Z)5r#w?SLv#vd@?2=m#)@at0}7Hz!r#BU~T=X z_~3uUs^;E?IxTzuW>Y8O#laO=*pzywZ8jHRVJIcJVEhQ0B9(kSmP=K6vNj)wcNqN| zr21zWC`tdGrj{)qP}0SyeWh9I!jA}eFY1yx_lY#QEoL}q$Lb!BrO^I zI>a64ysf&YEZ={ZI@e`tYp`bddU)hQC zcoR)sxZ@+kS{~j!3V(y9{X!UxTHg)+7OUCJ*8|Mgy`nZ)0JfA($`GbKrpC=t9FvN( zB%|}N=e80z8@;A#3+gins{Fg%IQCiKa$%_@DYxhTGphdfv%L)d5QS+*s&MPHIp(y% z`WoGd-iP$nY^qAl2Oq$qzq->kX0M;A`Tu5iMMD<_ zLte9#=iM*c)J0b{>Biy&SKxKKDQDN{#;SrW^hu3jwcn~PuI@}g7E`%dfT#Enz(i^i zmp-hO@e$Sou^x-JKrrPfKjCSM@?cWS3BHD8a$K+aTC-)MUSNZ9@KCbH za&M#ujO>ia_X|2j%p`)Lsu znr3Rt`)Qv4QffnwnW28BLDf6-(JCW8o21gJUQSi2x5+oa^V>)lQssGM0WF7WTv&yG z0KHIy5ypk`iR6^-mMGn&f|lcT*;FgFD)G=|M2O_VP1=YAgoY~t4SlYT8rTsG)6C(4 zB!q_s!j&VPN_ozg4>$ENb5;Yw{;{;OM6v3mvP_wiky=o0%ZdB<>sAkwj1o{I51ejA z_J>4>T!ObsERlPh;SGtQ!gdVbv!e{BFJ?)bp-Va7v;`NwB?aQq8zfDV2cWA34~kkFN( z)Ku&`N%gF8=McDa_=D)f%fncN7Nkv!81J`tR%E~NSr!SOt%X$3d5;r!@Hl?I+T3pe&AyZc`3;k=7;i0&*F#&XXS9yN`_ z!eFQ8z%wim)r!=sw6XGCdUV2LJc&2pSy>;H!|?kUBkv0BFcFy=S*qIhVX;4r-*uv% zTbhRg@H}!W%zh&4sw2B}TTmUb<()=9Uyl#-_4qJfj}P~8+Mb<%C`%7ow0|Hc*$ZpK)Eq=B2gd)Rv5SAQHRZY~D$}fni%1M-5 z&P7Ti2AuhjIv7&=39ojcTd@y52%S{JZ`A=y#xGHlmM5zOE!6&R(Y9p%MYcqlHOsG- z#X`@PYN~_k#LN~i+B4d(bZN)*jZAjRk4`@GB*WGbEIJY|y@1_7=%%#MSc#~wJzUkt zj6X*!Fr}jlY}Wy$u4Ykzrtcv>yJpn%&rkI;osm5hMcS z*g`3(mHff?xMZr&v#9Y(F*2YuUrx&5<@c6}<{X@t^F-7)6fwqz2`=v)VbG$x!4Dj+ z;1x+6a29)qYJf$=AQ+EC`5m`IGo*%LvoT^G`dAGz`PexnQPpc5eHrdUjaM!Xh=v1t zFcRSq3v1iCZP}<^wX!xy7g@^dc`D)M(zLJ^51~p3-f5bz{0yQt z5Qq*<$@uH5yhDA}SJe59wam*}X2W|I0&1?V4>t4ei#ntg>Vc7ofCH65?<)W5Kt03? z8|s4#;T;KGAsLmF(1l+&_GV|vlhTTSJd)H&B!&)Kq$;gokWCbTN^<7RA+ZjR!3wUh zq@qzpX~k%lG4i2GfGIBUH!ks41{<1~J3GXyBzc_inQKcI-)McCnYp+TUb9xW zj5D%^Wq$7b0!RLD64sdlulJ_gQBuvpruE)Q>K6nj>%_xhQB#$lzcc8aG{4GU9}EQ7 zC)^f?8XIfG(Z1Gk%G@&FV2&XKamAFz~it7|7D&mX7 zbPokFOlNgYhia(T`vs#uR9kDzz1?VTtf=%G{&khL6?Mklp@yKpYE>;<>sI-jnggrr zjjD#)+KMIvzwcOy0yHY>aMz6Afz-my$WpD}Xsl@R*Vp>1gZi#1u(}4K%|TR2^BSYE zHq>lXHq_Ns7&Yq~Yy9;LEznS9G}l%%*BJNun;MLUdcP68r@;u;H2MAbMaWQ-Q5{(8 zH<|jMzPn~@Fmcw86IceVcJX2XAX2*1<18d*iONS(hq7=Tno(8xFD z7;}vR!)Fv4MaDd1zOlf#)hISfjD`4_(o*9#<91`QQD&4ION^z)GW=xboyMxBipn+q zpvu!K-0GytQ!9U!fk0)TsWMb&gzBMw&6N#Jex#rR>8>zV8I?wrfxH;2@k6BnW1>Wv1Y(YV`a!cTDqjgYa{xW`y$tT*mear!03Ce1lw3I=Mc{6>CNz~AI=4m2D2 zR3~F@rN1hG8Zvwpm7$>DSg6Go*<$7PU4@pYkObL@Lx=GC%znqix$1*@R$_@z!HVWp-iSD7^tYN z3RG7c%^@@lmB_}XhN@5{QW-E{+gaMRMnh9oHS}DmJ?`r&nkz%dncrAcQ)g75EOinr zb+2l;2Q5XlW_4TJusVRBFGivbWQey$b!`J`*QjVjbnA4o0`-+m%03#aLr^AvU4vG9 zo6}|DudNL*w#Bd_hz?=nkFW z^%}}*8k*{1+xb^Fkh)N9Fwj`Lo`%0Uq-vvy9YErq9f8e3s-~j0n$l=|O|B44xLRhtaQ_Utiteoj#I` z7gv^-2Hs20Szc(M7nZU{hG!L3Ro)wOysHAi=9)k?;^#yG7yV^=F`o6W)8Yx=nO=Gt z7Dm>L8D4ZOL;Q~%@5QlwxVVPKFr@A>FU~oN=90y24YE0AMY&^KfpJ%*-!6ORUtPCj z9J3l@m0FBznyiOIF*D2gD=g|K$cGACf?I*-8?d^)3DgF97{m`KKL+|XXb)%~=%=8k zL46>8dYQkm%a1t!3G^<=g(a0Spj1#AC>?Y)=o%2WawdVMg0exmpuYpn2Q37ZftG{( zpc>GZLA9WIP$Q@b6a?{D+B(p^pbemnpjOZWpf=EhpeX2J&}PsUP&?==psk>;=$htRs8`G!b+i=yRY<&@G@M&_Yl-=uS{2 zXbq?dv;p)G=qsQdpznb8fcAra3hD&$H)o#*{TlQN=q=DW(7T|~IP{PPngIF)C<8PN zbPFgSQ~`9WCc zFzx|u1VuobL63qib^Qa}xJ0#6@H*U+rxzl(2Z>h+a-onsHyerH7Jt9SJ+FTCmw#Gk zsoSEtb3gB$RK5yR{?JXufqD#myxCLn@5apRka{{}vU)JXFehgG9G$7UT=$mVZn!q2 zjOOp%7@tUWyQ40;dCB79f~b){K4nfM>2j#PS{PIB^Wpw_r(3~;$@I4jG!4Z34EGnr zqdd?^ZtZwp3K}WCJ$Swn#IhJ3=21Lq1$_+UbmMD?1E8HCm0l|kMGqwxz`)TRN9a^J zejoSrTfjUne9-+6>@eLk;NA|x5GN7#qJ(<^+|n>A+U#^M3A-N@|5b3`3HNr8owl;@ zD2BlBd7=D^RRxUE6`*TCmwyJ_r=ieS!4BeoB8-KJFpe?~=q~Mz9f!mHB-{-w-abyW z%D~~yt=JAM6R*C6`y{we!&cYJPIpHh=E2>I!tceH%nrX;r_YN=HE=&O1$Gtpw)^}C z-M8T-C+d?I#F6FR8$VcPFJv008pi*E{H4O_gG}B{hH-G1OyNVx$g$Sl^N^u}PIt=O z9!_RiZ$%#S;MRtF_fq_^%Imi9sKN)`crOb&fyey*Y%kxY~QYqvwr5!MFC zG@=0hkzxJBA%l7?ekd7P75xXMWutFqgSE=yu0-8-A)K@V!&o{7;rzlOvoxWf9EUXC zihhoE-U`E^KOARx%XAqGcQ>XsudfSMtO5p`G}c&mP5#=cLI1j-F}129SYb?Eg{3p~ zVCsrH7Y-f7Wlj$?FKYDHa}5@2@V>RiRIE_I7lX~5nrTd3U0JyT<6nPca0Q~lLf{aA zY>NdVR^^j7O$~^vY{}5bELl1&zR2lf@ALnX4EGOe?NBS5gG`PUPQg;#S5IBBV)eRp zD=_71JYjoKDniZIcV*P*W>ZXQJBWmtLU;L^mcb%*Y>SM6#y&%pX)DR0SD(Ox+&=7Sf^lujSo zDz8S!sXkV->>AW{2mUf%?g8_<4|3n<;6yIEk!l1bIO8*`4CCKLhCmr!_kx_^xhv5} zTb|&?^wB*gXgOWw#~2XLtjh|IKfJ*EWD(4PoRxOUvMhN0J;+(kd%vmez8B9a&v+@j zAH?vIB)oYDPmN3PjF%N}pWIvVE`waElF)ywa_$A|jQ6M`UUZ*!yytPR@}a#Otq6~E zG3)Zm%~_x`yncjNgM`zaV;w6Wmmx5Q_Yn}U^8xLqIekyri6Up^Le80wQskos&%6lqlOQV}v{hCc!mZJVrL7p`tjoG3T5-~CZ^$rOp$OOF z-m+`dFUIK%Z`uQx-#Z$d6&}QfT+ZiiJwcZq#7aciCRfD?ggK)FR2E<@Rjb6Zv)S{ zpT1I+4o{0|&FKPF9`vfRH3{)mJBHu&cq{Qm&Y`III9Bk+mqnl27kFNlWP1N z_Y)obQ@HQ20~l{S2cB~*eWe<|#Ql5+|7+a)9sJ9#o_Vy=cLjLn!Qwv-p7URe|0MWXAd9~a_nf!tYrHWT z{Ou0+n{Z#{;Ai0eghT#j@GJv;r5gF*2P_u)R|GzxzvGP(@W~)cp08oQ>hOOD_*94c z3fzC%!TWK)+!6m8@KFbUH~1`vycH8MdB_NoyzNnmC8Gy)UdfPfUdd{7ka&{pu^#~NYW>aryP759DX~De+T?d_-_X>yosYM z-+G)peHcFnytNiZd9J5h7sKbipLLOs597BE%;gl)&vY; zF}$mX@j1iz67V}QSmU}G^Rs%Gd*d+vVe$x=>u8ieIL!UIVf=5wTkC3+_l$vmxtP8y z!CUKUbmzLgb{GfwMIvI&PA+??*9PZTA!mk*ZHlB?p)uu*5>Fwg#%@|=)Q>jG`%iI_oiX)G5Uvl z8^q}TO>w8+Yf&+e50mGbzqLk3`Coyz*5b&&LHA6(PDVZ@F<4XjGZFks44}B)M)z6Z z`@wTvjeIG1YYmP3mxuZ1o`AJ>M)xPk7wEMz@_!g6?}nkU*2(C8i(}5fJT3)qt&`Ec zUEDbry%yu$Zwb#a=Cw%SfnolCJB-KXbz#6d&^WcS(pYh4aaLw!U8D7^80$`ps;is* z!O~mTE}pi60+~6(1m;(*bGYU@T+6tQR#vgv;XECO5{hbZa*k(1n-Sjdg}R)3ngT(8 zSy`d4v~X?d+S1B^4-qfUTu~bI&EmmX1p3!{<1yC1!5feB{`KBwHZ*5xU&Xn>Y~JEb zi!rr$E>`1;=VGC;cy1Q|Oy?i0;}y@H!9O|tlgmFd`DYgYWNI(UPo|R3R9-Wcw@l?P zQ;BCP@0rSfrt+JmV^SexDPLJCge>JNOZm!D;bduf6~c7oI$b@PuH>gHndwS?x|UI~ zWUG*~RV>*m{A`^gC7-Rr$yUCyRcJHxUll^O{;R^7p~9J=!kMAMnW4g&p~9J=!kMAM znW-gp87cXhN`9u2pQ+?$D*2gOUd1?5#Whp;nx#URrTorPesk5|S<3G$70xUb!Yma+ zjtU`1g^;5{$WJXIcEcHA`J8=V4_ec`*n1`x zbQgx|=Av~pV`ckdff*2>YiVso5JzU^a&Bgp19`~7Q_oUfFIXLyn1Ajv+Q+^wp@*~i;?URGso%Ma7He zE!-R&gJW>znKS43e1XytQj?j5Jk4#W@|QIf%`cG5 z*`8T^of)%&pJQvo+FHZM#o=+~-mZR3MYr_smrDA$kA{8@==HX~zL8g+c zsx4*Z)!*}FhO3?CX6kCtTrQ3_Hmvo}uMbM0%_`DIogh|vt13n)lEP>T^6}8yGsK2N}7Jop6Osfjj zHR{Y!ffAiTrm9#gEi8NBsaN_4nVW#TNHt=^@jl`2$pFX&^kRv6d`s>Pw! zi!zd#4R4NPWj^{0I{Z#Yl2$Y~;wWOUdPQZ;8gkr7;r)v0ia_lOy@7L4$RE(zS*2#w z`RmaC8h1B0GzE>-)jSt`Q8-9pLp_d22Fn__!8HxV;Ygk?vCL_zw}*4)-0ZrFHGT-` zmf&#sPyr1&9hEuDjvB|aK2+=<*2~a%hGr4^URlbTbL10M$db8qc0Rz_oV2UjhK4nv#zadVx&>G;O<9DCHWraTyB!x~Y3nk~ zr?w@-G=F4SwsxHRXQ|nt&dsu)4Gnmx&J4-trTx@4RKN}?!(_*hLkn3LfN?|>Y7HC` zS`J#(ZNLm{VT&xZ}6d7%jVlj#FW6e5_8C;h+YF5_aM$Ufgd{&Yr;Tx7;Ce{hYaIiMDE8x%1y&M z1)tw4xK{8V1fLb;T0P~81bOa|e2*a48{9F>%Q0`~^I1Tq=N2I2SqvPDjhW>@rl*yN z#SNatb7Ru=3nKPRPZA%&sbpfiVa&ulo8c}3j=j<_D#&9Ku#O11`-xa+-bQ>B>kRVz zNh19B3jZr0{qxKn<=-bl{;DxRgfoQ*`FTX7|1rT=h=~8=nC}vACT`W|;^?oQ{5Ir= z_*KLBIuYUWEF9zeck)Q@Ad&eZBL4KTTJ9zy@;!_AFwWcw&+~BP?-IUJ_(tK^3Ew9C zX5o1@j^+L@K$iRSe2#MdPr+%Jmok3~h+j91uMy$?Q^8jRQ!$_9^CiHs*og3xN4+(Z zzXs(le4M-&Ys^$9>wU!Q(Qb&7aAuV_8T;5kHx}gg z6TgAAB;ppVAz))~?B{TlhIj+o7m(pT17x_r;qxgt&q%z{FvffYI2G{{Z^D`>kl`*N zBHRih!VM6y$NXL3*l9Q~NzB93Nih@V^fnI}3VA{-2P3ER-hwGwcx&@y-M? z-rIrHmoEWX?v3PguqP{glsxRpR^fM&pNR8F!XG62JfDJ1apq$_aTm_r62FZzgI8((6&z+@`2T_}McRcT#O;0n_CW9e5%G*d z8u{D@9Gir2$bSdtbcqP}bBJ5{1CE96ZYF*P=dgvp1#OJs?*h{O1@hlTegsbmo)dJT z4bnYT@M^(FhzRFR;MioGQU0{XJ|e>Xt>8()w*;?59Z>#vK&Epl%97>u4@88Qfwa;+ z`Lp`@HALjAoEXC=T7k3+kBIwTapxgZmh&}&KNtKM+6v2QCXnTHxA0#Reh%6Y%cl&; zbo`u%bi6@C`X-_cF+H<^Ukpfp z-v`p)0lLHAOGNnl6A}J0&=%c4fPWzUEeF!y13>!QLU;JvON77Yi17C^aWC3GYy$mV z0i?glK=GTaMvN4Vo)n}}Bt5$?4_ggcptaPtJ`5fR>;v@eGFu` zL~YAb+S1l`ZA)8F?1BwQNw92-EUQqNZ>h^F)1XC5HKDG2Kc92&ee-6LK=99Yf4}d8 z%z5YjzvrHN?z!jwc^ZD55b1rJ5b6Dp5b3pO*hYx-4g)g1R{)vbX}UjyeheANbVmVl zpXO9T#Qy>z;@t(uV;ezidLpgI!SK!EPn-?g!-fZqpz9 z@dLuOX!qfOkZWH6q};rhIQ;h!uClDFAmiC@Zw6#Ptswq=&{gBV*7zmY!yV~-1CaXA z?=?J5cceFK1l+I0+AtyfUjU?g-(ofkFW}!?k zYxlT@{;>#${O%(}dOsjUxn3nix}(P_SWgJ|e*(-JiM_hS5${RjsMEh{{7)L5KOX*| z_as8d)fT`k)ah;Fk65xWoGs05HPr|7O=;wq3!M}vF!M}v}f`19;ARK7KbPf_Co&O|6IzG@WYcBYb5aEXrBApuu5${nz z#``59;{BQs@lMmf0{jggU^`4BL?5^tkl~jTB7B$-;lE0M@b32rE76Y$=b>K_&PP8Y ztb*J_o3URO17_WabA5zp&-H|$$M@-v^mh{?{ofKI{r{r>{g!nBcq?mxW%Va~0Q-&! z7s4(;xCnX~Amcwsi1>Ach~K2$f2Q5HY4;bj`&-)mzqR`?@JQBTjE8_s?`}e*H0+9T<5Rm-&5F!3T zbVvT*B}D!|Aw>S00V&6RLx}$K8r{L4|4ke`mj~V@Uw)1d?Khhc?Na;lzJ|AHv<*|JT~TRl8?tcfd@B z1C)4xxf;*YFki#|8Ww0cKtr&u#2=(#p@zdW#4s!Vqcj|&A*wF!sDeO{NFdl!Ajl>V zU0C4V8qU&iu7>k9T%aLXM8XF(T&Cf24Qn+FYuKpaDh-=7T&v;Z8m`lDgN7S5d_uz~ zHQc1(W(~J$xJ|kSrr}-<_i1=Q!-ERaA;c*R5Xn0b?4h`Sc&`MME z@oAW;AwTFwKHy$L!aNPRkDEC6WDyoy%7}l^+!&MqKX}DIy$2DB1;RX#i zYWRePPinYH!_69Q)o`1JEgJ69uua3g8t&8ZfQAP(Jgngn4UcMgOvB?Ep3v~5h8-Hd ztD%*y=;G5bQ$wB|BfYp6j4)5bd=0thk?sW=4$yF*hJ!RL)R6XIh99BfC=JJGI6=cn z8cxx$Ov7m!@*En|xm&|o8qU>lzJ?1lT&!VG!(|#S*RWQ@u!fBquF|kc!?hYduHiZj zH)yy~!zVO+Qo~IeZq{(ChTAl3(QucBZ5r;?aG!<;G(4!`VGWOHcvQn<8Xnj1goY71)!o`(4v_SdjL!vPu&)Nqi7wDU8aVH%FmaFm8)G@PK} zBn_u%Sf=4L4QFV0w}!Jce4fzw&j`;$IvS^Z zWc(cb5f0LDiiQg`WdEl>`!6B;A0hh>VLs?ccsU``AEWWf8lSIm?klE0`HA7bu5t1O z@$DLCyAuB|jkA4-XAvSk+l4skPk5_#=eihi-m5|AF3b;JG^7Ae(a^%7LyLzOUsr_p z!oot&?{&k56%>pp9)Vvzv$9tPrj(?mfk666vyyi@54u=+3==TW>Tg|YG4%QPBlK&S zt0CK*?jOS+AKr0^3vKZ=*PAmlZq6xgTbk#8D!2AjcJRvDQ|AYB`OV3;CC7_eWJN_sHKQTsVMlf`Qk#79X}i4deg^%< z`pftIk@09Od<`a|BC*S;Jc{0S#4Rdc6LfCPym}ulF~xVrm=SMq#&xo%oA)wT^_@$V zmA*Dt3dYapNC5e;n=XqEFp%ZKE&39`6qDbOGT+>iDmuQO_1C2)49LR`tGT>o z*aEq5u`R!0>SOb`m*}5zvO_z4(Yn*`z4zWbFI?VsWi6iIpX?nw;<-PptwjS**b%)s z-9O<4t3}l%^!tpfPsxqTynx?S3U`XDkCfnBjr^#Cr;f~@>>_u%nmVd0ot-TtqaEE! zvTWz?GnXMG=p6nk8(3OT(G?WUxHTu#l3l!SX+U2Htv;gFEKTuLW^HFya8hk&L2!I+ zXLj($+RpRwZLHvRwVgS^qVS&JH7%6A8CChl7ij)-_3_ul2jT2}PAcn^f%4{4te;aK z2W#HU`X~5=x3L?NI^yXFaY#c_hL`FhjJi};{39*?a3c~{vRmEyLCUeeUrsj2fKsI%Kq9Z9Mhl27$o{%{1zv{yLI z(lNn~<^o_;B(fS`1JjK@HdDXcDqrYx`w>6Zq_$HlUblYdyHjtN)ZxT-3b{#t2->J!TL|X8Z=>6~&Y4Dr- z%_@9O8tAZ*5+FFJ= ztk#lz1^N@P(fc|xJDlow?c*E=H(y2Pzh{0ue?uOhkFR;x@E7=U3_j9UfYSE<3-T$S zjxRdh{(9GM#i!7FU>9QRY=yRvojIf!K1*Z1=mmvDKI$R<_K5^_?Z8QM<-LPf-BFs7 z@>BW;MQ+ly^cCNhK|F92U$VYg^a_3hI51E?Z;0^^I8{@GunDs7Kr2spzg;FgU}7X+z^+f|1SqZQg}nl?4VYx~NfD3dqFy z-9~@-6yjkN!uzvK10xBeHS;$bJ&IpDx)Hyl>FJ+(0?L{&9%>3DERzF*B)B^~oPqJ7 zONj)f#UHtkx=w_#?VYAQTGISVrTHsWniF<2y`AmkmxTWDu>YyDjOe6{+EZE8xk|s; zfp`}J5B|0G6yin4?X!P7D(j&Ssmo@@a-wwJ2;c7ekJ=h*EWhWAbal1k$ z`GmxYM#v9F)I=k%17qcf(BC&;ci=z0T?OuOs=7-2f;X}Oqz&W%* zYJdg)@GfBOhbxsWB@Kbj^!}0k7z6cJ$()k>gxF1zuRX<|+8=_=6F)Bz zA9tggeffzu?*|ZgQ|Xm+3x-^|w7ahx;LcC0AS?U)?&9(b3GhsOkpTP03W|{SaNJ$* zy$sd8ZXPFC^iB3?LAP85w+C?->g*+RO+k6nsN7OJXv}iCR?<#`jfB_MraD|OXiPXw zg8ZWi@>ysIclQZeb=o0^cURun=N4-gV0TZkYa~$XK1pFdqI>@)GZS-P7hb8(jKW_T z{$60`Hhwb`cYVRNSNGXrnT%sYA`N{XT>+dX;jaaBkT4f^A7%lZ%lcx?70`D@*Dx&W zG5noCnAw1CS*L}3CAgfA{+W;?v-)-KKLGyw_y_-bK;JO@nEK-GvNF$oYh0(91tC+x zZ~;%aTSLB^bzVW_wGUxF#`ZPocU-{A_g%Ry_hoq5>wXgax3 z;B$cFTmGenW8X00$Ob)yo8Sq@_nyK{@q{Cb_Y`iLC)@x}xKHC9Rk6?oe{nf3|Ri2*dQQ#UCH0 zcfWd-U;6RyCJjxvVK7>LUP7oJ=F4zXHH0=M&q{>D(!2XG44=99<2&zz;d2n-3@wPW z?0jb7&r6p{XavseNEaH!3|(sR&h%)@<#P<_ou^*q*W~+6VBUOrr=rYkbXY?_nBJ4} zo#n}wVv$ z`@9NM@?{u48F(@8#D^iA_c4AS*WonzB-}pZi3p}17sJh4k6P5@arm=6KCZ*DUhKPu z_wZ`@P|1Ow^vo-v$&=w$A(2{S#{O_Q{+KU|%sjp6)!P~FVibk zlnj^a4DPKd^QTgsczC~;_u+kA-X}viG~tpVmVPgu+!$T&&oV0jDo%!VNg^`dGC=X< z?w^et2(bUg4V9g8qt874UNr`7zoc$-BCD(c74QGjOA$5&uC-_@4kb`WgM7OYwgRxY5t( z&vihfj}bTWmepn*KILg5;-3LN3j(16?+kwfaHE3}FG~skg%o^V3cfG}=lxjbVScqK zIQJ)*hyH7T8y%1NKMCCEbi}!@fDd~z?=$&#jkBj;j{f_K#ucMadr606)p6SHF5FG3yg7B7$VH#))hGQu6h6yQ+(ZhVv$hGxVZAzMt1lMtMDrd4 zPdImTa3AN{LF~m3%jtH!2N&JXzqd*8$k$ z51i$g44Cmbd_Muuhr#bY;@99zh{hk+a0B6B+&!h?FA1-PnGKNj;-n6Re(&dhW?1pJFuAEcQnpBu;|`Gi1hgF z3Lg~p-)sC8LZtiOfJ`@|pGx;LfSglb4aoE#0Hps??a%L2(Esb&Kc@ZpT?&?~gZ@we z&VzjSjldpY!l5{8LWultBSgOU0W#gifQ+}2?g;-aLWF;c5aD+aBK#3RhJO{1;eAE@43XPZVb>4ayt3ij{ta-Xny* zF@`wc{o1`&<2E7MY@^11tnoIDzo7Bs8qY~n>CleN^oA26{xpqK7a_h(Q;oZ)=338g8nv@V_S9T=ZBgNf0zPNoQ*)fc0}t2}&p_z3{bim5(hG!G5y&wa z#gV-^}$o^o4GtM{jIc3d`{)z$I@5<(@JvC}gIdpuKQd%(E1ws*e~qp%q(ha47}!lswJA2TUoXLf!|iv z?flh@N_%>aGd&Zw;s$(F7_m$STxLjQjFhUM3hf#tt6{44_)xPO)>FvV5)#sie+5Q( zStIb!BQKdAk<sd*NRTtfqmZ9BfInfz7ySER@t=UlrN(^L64+jofAEZYw}in z-v4w-4z@AbJ9nJQyf&}6u^bfH?@Y~%`qC?_T0oROznT%*Q)!pvRM$JDNd$pK-w*^z zt=!_0LoE@X6Fox5bFo70l;=7%IZi!4@l?FiKXoToZ34$uj6PKJ_KqXz*f$lxRxSV2 zrEhP^skBQ^D!RwQ^$WlmhaNcj^2`&59(da+J(2djo!2ka;u{$_UVX#~91HEr{o*}_ zOUa+5nRg(s=}vXd?M|I1w-r}LNBx@3RkZ)m8+uLUaQIfHAIrNWv@^5#RP~=@2c^}` zQaI8J9Up;(XYjW@^Q2Rr?`c)L8Y|~Hk<-iij9lScp4W=Ljm0*Ef;*O~xuWir0uSu|I-deb^1n^ zkI3K(v)Ujfg>hD(kq;wYM&M|1XH9=yj`F;#+w5$6oG)Gl?$q^l9?UI%b7ic!W5uE3 zHY|-S-(P%U#evGE_U9G7rM@$`n9a(1KaDPx%^l54b%h*xE0$i<03=#^ge8lPo4~qo zA+`K~e6AZ?!c_74IpqhiWhM{na9j`fkOzCA0!M#!8dTFun;nRm$?Y_OBWfpuUf9HN z)Bc>SWq(a*?0dxP-Tp*VN_!!bKvMrJ&s61?qUYE*vdBWiJhih2yjbF^zC6^L-pbEL zp^htZZP3+QTFF0<7ri50Rwc`iN{e_Jul#6q(&W0W^B)JS7A#>!HbCzSfMqVqkve&O*3C|Auz zZp`>yY+9_PsWknoKhM=blWu%8eV>vnj2kkFSHL-G&!dN@>yEEuiKZA% zvzvp6Ye$yzmn00L$@NwrNBlw^{r%z9=n0TJkv;ykJ3<|w!p1BxN~q(qU|Dq1k-E+o zk%PZ}G6F?6Wg(@|dl~-vw*>8DP);BfQ-sIhHPn&g53ffMJMehXo}w1Jyf*$ElELP? zCzT{EdfVQOltnhQ!oQ2fSfE<=Ac*kZw?mR{r6*^V8aOJ=8n9&jphlTwa*TOg?vRVF9*UPU!0o-nyztBZ*hme@gkF~hcD`VZuRY^ z=*eZ+S@%5GQ!BB}Wzx>j?hL!SR(7+bvYwZwMSJ?td_o3piT7i%&~LpFcDyQEIlOVA z6ABl^v)ObWp4Q>s`9BC5dSijxXj1*FccXJuhc#_BVEtY664e{S&vFx_bd2cDX(Gi` zhgPk?9+K3Vb?d06v3Ezur6^)6CFW zyU7BodWsLFN?9k+rqWwbtAlK4i|xJ(b&*z4J%>Avj%Qf=Zw2}-_N@VUYi$^$aew%8NCDf_Bm4c~ z0=#BmH+*?ct0-Aa&JG-o*3W{69XJ@BILr>TL?Luw&> zL#Fx{_G(Hx>>VDRg^u74{{XdESsm)g_J?^cg8BJZXES)m#b(b-n76K1Hu+cIAnsjvjj8=*!va*++1BfbEESRYeKN{sj& zbliLus^Pll!CiHGyjbz!OgjMe<#|~n@qW>E^vf3~!wHr=K1onT4;7iJ>bR4Mm%$LzLj)B*E;{dX#}Fy1t5J9FY$8 z^E+PgMb};{Qsc{z8rz-Qazdvr@`s;6n7UK_$X8WJHj(G@Zxyu^?RQG4KKme~xQ`11 ziJpA~4q{*1HPB{bfqk+3SfDL7BQq9giOtB31-8a!z-3cxMnNp_L~O>u)-i=_jnJ;U zl?r9(8k@NjegQ2p&V164o5_@z5BDL1n z;uq4K!QeDQ&o>C{jGWAwnj-JAiUlGoT z2(%6PR$M5Kq_xPuaEWuaYiiG49-rrNXn}*4W$W3UwK!Y9Pu@kMsZOkf+WI5nE^=+X z>c;Gh$Vs(GPvvDlWm%4c0zHLc|7RH48Gg!#mJ1fvo$AB(mEH3_#iN{Hye2p8*n0M! z_)3yniO0HAJea}su9WoVx?vA>X*>3DrZ?scVJHz8ra!ZQJ`g%}VelpnOOfm|#G>Ru zEKjRZ0x_Kf?l|7HJd|7vvk75Br!s=qgiiVVk?))#1|=(FtT;m$N@Iq(6JaV{y(g8A zDRUWW7(ylVm)LqrY{NEeeZw}C)OsLXPl+7=8)ju5eIzygRXY6x3?_6;^G8~N^wijm zI>L7mrpcTc>oVRsG7xYA@;8JJb)+dd7wSm&hi^r(pnb>$%c-9N%ox<1)x>a2w|)lT zirk|8O_i;_G9-YLiO*O6MWq@QEd@t=wQ3PvCWbi~ZINT-hs^O=rj+Ji{UadC3~{Rc zBI?yU(uyS)|LU*93+B$~sH}`*FeB{K3W z!X*2tbk6GkC<)RUIKl$7XE!;5hgvg=%a7DFVuTdqD{2pQP1U>fDCepZ)1kS^`6+j3 zT|EnFz?2w%2R$v)vTU`@oGGeb$!k+yA42=(j02j^lo_h5ZYxt} zDxKXbw&PWqHzmsaFCVnbl;&Q0cjC-gb*AT_n3Pbj#?^C}Veja}@sGXZ036sUF!(1O zn!++nNq)Nz>lQdGl?zYw1s{|PgsX0Mo@F{wX%HOrMb)IS(27`%ko<5&9G@cnO55pV zNA?6SwIe(i=AMiZ3?bkx2c2-RnBH<=hQ){4sOzHHT4iRIdn8;)ikqg6(iBHoH#>dB zjp!^Y%`R-Gr%kpL&mS2GhG;i@tNJYtzyx3%?vsaF_#+oUDf67~qukZ~7j6AwZzvwr z3><1n!xD)tw1yHmbzkTd)&zJ2$iJF%UPb?3p*=wQy>N)v;+1qiHzG2sB4S85Ax%pK zEFZFq`=9nLL!&AJYtBm|=}0*`WvBb2-@-s_&>b^+(^pJC6CoC+fQh>(0V5_6hq%EP?zn z9q0Gq)84YCzq&NebOZFi&@cQ&71~=MmMqIb5l6o5&1%>O`PEdX~n;me#c5?NayXC^VkE z&wk6^9TJkKIRX^-q!+8^T2q63P^aYUcM z9*ol~ekt<~=TT<88%hlLpjfn+mF?~8bvd!(3frt^ZI!Gnx%xe}gGHc_Dy1rZ#&j+$ zO20x}i4<3>hg5V@5DQyXJ`9+8Q{Fg2E(?rFk98 z$2v=Rrm~anC@`Bla3qPVH7T%M>PzOEQ)9BwErR)^jvqrco(TCrxoW=NLknu1cc;omt(ILG(@dOi1{QN%onM z@R{cIG2>G(;7q@JD>pLLoq7pl^U9l?@?CcQ-6%c`KZu+QOFwc-nB7#9s*>tqwEBvo z7GvtFJGB5EyK<{l`^)>0o`1^D_8)Vcz)9OoT6NL(NfsRm&Jj+5dQ-h$>`PfW8i{a z3^%scm*EZnd#I8zbdo<1h*grz;)8@2q3Odc&oV2nU`JDBcdJ{8Y-t6TjF=1wXQ*ro z?HutVHE0UQieJrEcD-H9uzdvkM_?CvMusA^FdY{3Roj6-kf!8W7udzLi=SncR(!`996e}tvD6#WZFJK8YNNx0Q=*gB)^(nS4(6|y-EfWUVaDZOkv(oi z>dbE}jT7cJmhy(A&dkQZ@vVK}xjS&|bYp3Iyb|n#ar#(wW8m0U(mXy5F34Z4h%y*g zqIL&fKfOEf2BQ7hN~}srsdfiWq(S8F4!jB9w{ms|{*u#U&S(XTxt;*w**JHDWMIo-|T|Zhf!wx)Qm+wk@!7klom-Bz04`!fUylVqFnqgBg%?QbnI!^nWL+UC?rA;V@c*awyf|v zlXF6ym-@q#E&*$=*@+0D&I@o;$i+zZZCxM#nmfVxq0YX#T>kLSvD=#V=Q~k)?3Hre zzlUAQbpHuCy5x?QBS-tq@Nuj}N(=E_-howOuZHr3RJ zIxq8w&qtj^PWe}J_cksMfiL@oKYXv01N8w6b$;5EJHiW_iuQn%Yp%&hjgIvxZo_&h zDj(mDJ=b-e9BokF)z5N-E;ruPYK(WN_gzt?q==~ODvRi*jE0zAX6o2*;suyP0 zi7IcK8-8y}c;$c4^*`LL|1sD9c(?u?uK&9!{)&Q!Wrgps7{CwLvkZspB_&w`JS@w8 zhh?ena6LU8&6M81J=&ZEoGE4d*1dz8~D@6XXcbVM0Tlvbc`^c-Mkank3jQ^87O#K32ZvZnq}p1Koh0(8+)-KRAho6(ubYFsZf%$SRmMe+D0)^I;Z^wu={JqP3{-y7O-2}crNk+6K3Y>19cD9Vw90~-uy zJ9wpF8$-(<)YiSBmP@deC^n%`h14B@d_)Dw5YfvdWC#@6il6LI`irw#ID3yj@-;|f zD$XM>#OchP%ksI7bZg3k}Uqob|Kxczp^wO44E6z9cL;W$sYJ;i6XcFL*;-8bqD}U@D zanI7M>IG8i)9;|tN)NB=yaFSJKe7$=IBVHaHxL!!QTAa2paEghcxYy$ba@roExOtb z;Sop5zZ>RE8j8B%Opm`e^FSlHLb7H=wC31o)Y1Jr&2ikE2lVaju-9Q#v52?Tq|OwZVVuq;E_-||qU; z^I=RmA=#izqhzu2t<1%3c=nhnUB#kqkc1=(?JgjXU=(yUZY_xd zZRsNeZT{5}_~}(xY{l|7Jb>{fb`TqYbh)tT7TB!Hg|d+EQIH%C(t!;mof`FYaUPXk z!15+~fm@gjY7obeeOP?$z-AC5J{=jlqif`6P$yw@0NFskNSF%qS>y`q2Q|AJVHdyf zq*gRn{~1G(v;y_w|Ch#{(2l;vYbX`{Yci-gaJ-5C5hHqn8R$*XsvzxK$hHYlw0 zg#QVCrL1=4x*9nRzy1fj{{H-`$IReAKpLPU_C^!LvcjJ}jpJo6ba=*58C~O5Z&Dv* z)3hHlG9>srtz@=;H_=r0p{bnJ(mOC-j|O(O-l6<^9-P>FAgj9TJ^y~f!zJNnlo2HY zqkIeZ@wFgbb85@gyFFU(JcK4stzjCa`H+40BNJz`udb6uS-W)aic2XFYdLeHef1f! zt(KOy*`;m0l;MH4WC2d=D+IF^;1EI>sUfSheXjH<7s^lnS!%%|838^G0-T~$jKew( z5<2WgjX#e_tjv#~Je-x@TFc?KccbNuPs;_$5?mWFOU8OD1x(XHHP@lLz?J;oGTy+#TLs1v*JV zIJ55I)Ngg;Q+4*HPfqNr%bZ!AaOw}b=^aio4=vE^1ka>;G=I@w?7XjV`Xz zm)+H3LFljNuf{+A+1{|r|AIyV;k#FCyKj-6TaXm-CgxF86|p|*#(W%2Xe$3%8G0q{>gO>%K7~CeZz2!O3Rh1;P#BDH zIAm?#`7A2u%Jz#&egyVnbS~W>eFnOqOKDfZQhH5a(a%bJ63+PP`EN7iqNi`!PNHuj3>*mS#m zWAs*>eB2xzi$iK#qqp|KfhpIHA-#RV1!AOdtr&WkZ~`0Ytqd2=w7%NZk!--gl%qF+ zw)Q4aTWrd;0uMq+epm(y)XQb3FAPH9~KDyNSs zfkrUep(ASUcwYSzz|O00liy?b75-D}uOduToSw(q_)8#KsH2ZR{LfGmgnI24f_{*) z5Ic~bVXjZVy`!H$vIAv1$L_HVaYcxAGjY}PMOH@zS%tTx?$aytBB}OiQmtzb^U)+Y z)D?zt5E17IwB>WYn{RjaQ8Sx8Lj_DiXQ+Tlg(Ik{Wr3syf=aJdlTr=vj+;b zd;+6yPhu%m1jHY2*DSe@y@rEz`vpDmqiKcz&CO}7)G7Qp6q@Y+Lc2*f9jY6Cj2u9p zgXZMnMfTnJ{oIlvEGUwvD;vVVJhY zn8_zEUeU;?I(6y-)*oM2iY~NQkHB}=m1aWag%N}s=hwQ10rY1`k?srw1q|N%%(wnY zQm253uReOlf=ujGDJK<#R)Fpcl8xYGpdPBVkwYZP*^%L?R?n%;L+~@Cwhel{q}B)g zq7BPA{GGcH-_KG=R40C)N%h;&ed9;%=n7=0WA(jZjJQ??&_|`FA7tll-4> z$Au@&xZv?Oy@N9=*&HIAM0$89^lB3I43*6I)v(O=uH)>$%Qns@ZT% zRIuUeFIZLTW)Soc?Mw<*?;8F6SDh80JaZQafy=s_R!!nRh)FHB!%&RHTQ*s1pp7bD zYhWuE6R?DVQ669;*ujeTL3678!qW2Q8(O&fEHi1FJQi-!WxNx54)1TomY81W}hy8mpIproGw^p9$l6m3bmB@RDsx zNK+()%B4KV{lo|F`*4#oHXQ@a_T{sDBT3Gmj6&^Fw$#doOYDpfZ1k`G8`dryIrYS& z+N}W|MziedrY8T>ITMRtz{gYkr7vQe&d9*V>f?6#TBo`R#y~b8n?n`5bS=NFIE$(n z_8t0~@WPLV;Gou9YP&QxOJAXm0AbVLb_T@0ho|$#+P=q-wB9uR1}@a0jdTr4gk7Xb zx3D!YX5wFyvPEa`-I4dmG`@%Ay?K}?Ora+XXZa?~08f|#PniCmF!`P^d7d!2o-k#e zFjG8XCV9e4@Prw|cO0aOjNl9As?B$Me1qb9*pAHSi>}TnPk;q{S5*!)ngD|m0ZLaH z->~*AuQlXao`@S+#&=1-HNZu4D_XPJZq9+L9nIu#WG;Ti-ox#gO-^Z3WRDYNi`ms1 zFjnBwzG%)r+NB$tMwYMjulh60BTn@O^g||wd$ODeTL z&O=xXsdAejywGRzjCCeQ+;#86C;H$WXmX@!vCR?T5?!)1&&jnTJ{Ap|b{%xX9O*HP zqnu6eOTow+C@M>Wom=erv~NpR8`ZvCr>u|%u-`--9690+i(B}+tZRf+(vf8@;zo|u z=c=KpztcPrfnxQU3eStxbH@XeJ}gVhX-!&z-5S5oTF9Av7Tt-Er(H>tLK2MXyuD0S zFNF?5Izyw?TR{qRzsO-|B+`)V9;6XZDrv%lM(F9CvH+Ixw zQG!r0f&+Zsy%F!TRO;iRjwD+hwcoR`C|X2HPG^6c|@9r4o-=PfEBVZRHx7;Bif)Kta(p1xgL$>ZTBIxpe`#^)7TPr|EGvBe0p| z)+Ww9h~2|BY9bpFn}Q~e)%wVkA`8^kYyVfjfbQUr+>YPaL8mDP{-IO-a5J0|NFv#<|YdVbsiGitq#h%j8C$bptCUs7*u=#@B2^^+GsMakVS?P>iL;j=a)?x z$lv0!HTxx5_kbYj7#UbwQ||P|8RD@zJIUH)#~pas0*zdqzDg9~6U!`5qB^ocCei?< z1g9%P`10v#a(nf+F*-Rl>zu$UR-WAIR<3-NsjthurD5Zg=w!9V$&DyCq8V2=Zj@uI zaZNW=JA`C4?wZ~^5+O`cM;aHl17Ao8z$qHZ@yPW40@c%w_Vlu^%Z$}_1a#no$9KIw>d zsK+ar7$wH5YE4~c=C5SSJe4FeOsF|uF zvpl=v^3qwV=U?+B^6-|s6(_R}Qbni?s!O;{VX8O~&8<}!rHblJnRUB3xsf9Rl}$Kd z`d-~B-dJn@&cEgW_a$_d+3!dgieJ<~h4cd7ioI&#UNuqQ}N+^FE67mznfG^pf9+{TQ4tVS-n_QQe>6f6A9z)gp)T0~_NHV0GLv z>N3?#*I+k{Gq3m?=s0k8Z(2gX5OHFR;9}8^-w;POVtH15M0b$p8PpHNs%b~4E5z4= zH90dA#n#noG1r1(n>sC$X_(TcS&~0PG^q89y5on1`Q$ipDXzxOQy00|%^Pqe#gXs9 z+tJNKx8al&L%EutNaa zzMnb1pTjQk?@pBIIn7K@q-9%hnRIJ}Wk52VL~~_{%Bhggk&vP7^tXavb);ZU zlx2{h)bJmhhM4%|LAvu8b|oC8t>^lXicUjnc>V{oL6?U%SnY zh5svoTy=l39=Y>#QuB+-Ud9hz~pF9o$r51{1Eub^|u!*H^ zK?*%Hj7;EP{U8kIp=U-YqzXuM3pqg69fhr3Uf65)qnp0}+MCqr}Vtko;vlg(13)LNUahj4eLENU3;A?1J z&LgalvcV}fG3A@>O&QZRr0JH=q^--xlBw43sa29nmQ3F$@8z(ZI!^tWi6)D-Re8-o zE}dvrkh&o|VQm8yp_m!Xn4&l388SpEL_*KdUA752BUC zex&$Y8rG@X3P*0FzZ&a7Y8X>j_jIl2x$=}S&M(W*w2%U)VKvm+_UY&^;G|pGtj=;c z(aQIhReYB)c4R?<7R`-({~F`k(Pf_Si}9}dQLBt@5+X7mu6FZW{)(WEe=!40re<|c zl*g|}akywQ@n1~NY24Ck9k{ZoS%Bn%^{iYfr zCCH$-iNvgC=)$NBrEjKnIAyXT#?MYVjgKQNRH4X1i1@^c*v+usIgRXp^c#r&-`$GX zFK~>)ANetUy(?lfG<$JaF%^ElRZ1?myE67+W}z9LVhf~c>d!i3aVaR&8K^1nI+!G} zLiQ51k4DbRNSz&k?h4t$(AJZ{la|Q*6S`XU+g??BV{^mywa0 z*>#n>cWk6V^?h}pD7!yPqNOu+NmEFQ7c~f>H76Cafi8QOxwGRlj*LLwip3v*f3irF z6%Hfy_4SQ)ibFzM+3u(r_jD9#6M+#?>yU>|=|wxb0a*L_#zLU(UlkEe56F=uJ3$I9 zKwGDo$2Nvtp+|c{N;~yhKvQmFQzkF_oUJv_H_JZ%lf2F1p1UyF z3FBiEYzOJ}fpyMg zo=&vihtgq^d*c_t9BQ7J5P#9_MrV8KH^(MTazoOX`F793&_^`?HZ|skj-}zN z(8V3qCyU<3KIx}?*K{9>^+`=kE?L|YJx`IT*MIaG~`{WGF2 zwqNeZ^j29>$Px!f2naBY{AwfMc7pf=Ht^MNXbq)PN|R`^4v4Ho}dmmO)L&VuSj z#XUIbTKt}W)l|}=8#9ZP+LYMYLOx5_=)^N99aqc5EwwDR*)f-F0~fO`=&H2Es92$m z?pTda2Mp)L#UJ@Ie(QE|wLmt&>=w?l;{2{?qN^p!kk1A)b}(;`B+bQ0l?i!M=MM7E5+4_F~+n$)i#tnUyQ%llTf2F0yBTj{D(@oVu>H zxT_Lsi6QKhMps6CVbWXzPrcTuE`xEfHlx)P;Y92KywLD~#n$Q5j7X(-YEGMwTGC;yhNqeTypDD1zB#OXn z*YdnfLnAzi9l-L2)38cod4e@*Y#REh)38=!YoRDQ4V*nN-Xk^z0AlA_;{Aa`1e^i8_tmBj7fGoc;OxxH_`Rt&RT&GQmXdahPAxO6wkn*-U|Jws1y% z#&Z^0dA9lLN%zp)X zN8%vNHX8ligD}s^k_c_7To8B`ikxfapL=cxVcuWuQ;qw7g3{=Z9L2Bq6wD*UyEz53 z0d?_5cwr1e%UmU@mPyIg*Dx^%snzEJMsHbwtu#ua$X*NeQ7&7i3;6Jp8o{EJYqB||_-V%WuigVW<;Voo zQL|4;!c#?cF+eUPl6*eP^gc(n#YFZ8f1%@vT8FBsqd^TbnEKPc#oVltN)mtgD?$ve z2|zwMQBLgCTulYf*BeK80WJH2Y$Z8}Kuq5eVTw1^4|GM=T+bw>wjObT%-zo8?KN;` zcQR=t$AFK7eIKq;S&>pIx0<}j>EP#_EeBBc$lEI}cVxzrPy|5$cMrYN7G(zl#|W9+ zZ|7))eY|4$5K>X5QWlS8OwtBQz)L*8^Rio9Ew>p;mLOb-U5**v$J7k(K1iOrUDVgr zH?KoTP8c&$Ht638B{hBsRwwoOxZ;WV{xCmu;T=yvO3{sFC{5N&=#@xS#znV86Z7M* z!fdOH&gy)i9wA~cKFD2>f&%iPq`23+;E*&3>0!YvXNqNAkMm{&tm>2MFv1p&{JOSS z<5Imbu@6=_TTOaUbXnm7@zBJIo7|xQY(`~3x-FT&%i4y3-3$nNY3m;yZ!y3n(ihBi zdWwc+ycpjwMK=MQMy?J~_!SUl~T9o(z>DIfw=ELIgOWd^$ip8!h;iy9hPoTNIhY)03(VU|8ODe8W ztgJ>IVK=>^hGisjJr|u-!_(5n3_mm`$J)_jXXkKNeG8BEt}%31akI-~^-rbliPI+M zQg?OENLCa-;`(o*AzQ0VGrNJlN4tZe0pEc>diumgZOn%b)y{wl5hVTseva>u@!IJjGJ4Gl0~NLDaC`VsW1gw}OVG_dw7J4Av8 z9Ii|iy~-Nt?b5)|JN`=^X%G`=?^{hQW=cg-q&}w-f6!JtCCdU_8|qr(GtoFnD?X*32B@2adU| z&KW9ar%J*|&-xIH68{TVjV9({iz;pbkcpU@OvjhVauO$Gs<ECRUSA0Ffc)Ff6dlhkdkg{S%;=@0SdY?=c7^;cNy#cgEr?H0@-uR)xm{mxcS zu!~yMcq;d4J@23L0#Cx6s6N3jBEDpoA5D{WF~-M7Ud*x|wxY{tY~gBQ9n8!Z0+~)D zvy1Fm@o|$n&e}|@w0+a%1W)ywxOI$2`qM+Z2H7XnyiuQ9FVDf0^+YRk!dEf}iC>rc z3Kh)#Y5n=}$A|LNlrq$kiG%O`f?Y0Ea3MM;ZmS;$k#AeLpLslFvVaRhIaLr%7T!_ zN3Xowf9-;8#<2T#Ci724o|J^>UVKF9^?`}XGYe> zTk@TJ!q%-NG|5=4B{aC;vv#zK@j<7s`?kvV4x+8~Z;IGi} zf%eRkNtt)pHSgj)To^q<+##Ph^0Cvm@@ha+Ad#FB!Yu5dC*;{3&difeb%#@r#^R*xD=8ix)zc1zad(&eQ=n)MZ^^%0TYakP3K^3Yyj66VXM{7Fa zTUrtxA0sEVNN_Q-3B`_Tilvh3!W2?fHi1s<2|86awa2cm0UsvE#;1 z2$Zm8vaKOsDZF86O~F@+ZkStBaNC3et6=JcY^&(Hg1J?5f(7?h%&S_6KqZS72B*$` zprT-ibq^vGUc0QOU~WaF_L=tZ;);SI?NBzmYGF`Z5D;mqV7CXCEV{qqj;guA`2}zv zJZzrv2`rqmXl~WQc?H)Fzph~Rk|nbr&bH=OFJ>sj9x?|dlk65(2eYju6|?6qTDah0 zmFk@8B}*z62BoAG3+HBA+M%*)K}A7D#j=Vy*;eTJrT<|KDXm&qQZYMNy`%y)y{@3> zI+Oe2*-Mu`v}noPg5e{E7VEN(TTopweKvlU7TjeOSSZNS8ljIhQ-`=EIKN^EgE7RA zlGzVbEqFKuO%6iO+vm(iv63qZT9B&WKopeXRT{^xg30$Xl z=UVZ=?F(lwo`m9=;*;doklTaGXF7Z;XD?VZgky;vNs)ebIa+?CB*%&j52O{iEry+X2ttA`sas}|0!M3UK- zaDvMy!Zr&R&7L!-V(HQX!B~s}FRRR1uxM!onFbo>wJ464^T$t~;9>qD8ub>upkT;t z=q5{pOCBy5XkD!e564@U%&k~L#vW)T1sOYc(Y+Pj1)Dq<%v=?GIN^7D_2R_~Djt9{ z32ZtODriWC3Qt~Gxrm*Qg=W9eT^3oE+%Cl&p#!7n;}=yYCk1+rdpHO-HobSE#y#1w z&S;ujDl3;(1Pk2OnlP4qRhO$vzb#53W7(3b2WJN>3WlO_J>*U4!K$RGj?!qtb^|9> zEW27~d3z8nHDPvewlIgV*^Snfmm9V!x~6Dw;SB{=QF4YN$rQ6`V7_ zfZa_uNRqpBM(r^7gl|#x?=JKFM|wmdyWMvEu1@h$z0b( zYSX=_g^WYb7i#0|_l4!JVKjO%z0be)vyP@8$CwVs3ogSV>%cxZGd1HU@MW+^(`Ml% zt&el9wLblsYsE2l(E7Aj(yV_=L+C&A2Lb8!d+qkx8QgL%NBHr5mRX;_N#dPfjyjH`Z8V=KNxIis7lhY^yQx~EK;I~`< z!oh`wDvbM<6mHzOMY<#$)mRdND2YIn1kl8=EY-D&Fy0L>_{vw1FC>0trNM6qSb#=ZH0O4NsSX}@*rPi}hm zhi~pLy|)aKhoQ!gzoB4Y`Mnr3tA|XfS~z>jqJm+A@$Z_VVb$U~{AzI+ZaMu2JSVd$ zL`(Z}*=<(Z^31;9WFnu;@%b9l=vP1#k4(PCUXVF1l72o!okhP<_$$C4&6}3TuRqWk z_$$O8H(j`XlS6&#eGM7(UxvRi@axI{arl?PP;wuj8-EgGt30>Dxdr}{y#Al3e_4p- zE5P4j{N*D2p8(x7CO2f<8tPM0kD;M}?kpePxnkpnxkCbc-sCj^VOkL8YKArSoEGXc zx!za8Fsu)!qbHE@E`)Q#Oik2xKGQ&NEo0$K8Xo^f_~&Bh7)FeQKgwa~^#t5EVQc2= z*lXj)_t3Kq{u}Zws~^hKo&Pb$$0qYp-u$N|(&xe569ty_pWggE=_6J0$P{6ceu_yH zmnb?8fd7#zENdU~Ckax^fTCFokjJL0ENi1TkK01R4~_7fgmzovoy#YRSAKN@MJ&X4iu$w@ICj;Tej?;#Zb)`Erebi zeE6OR3$4L(7CpduktNkdn5yeWTsIg4_C1T|+!LH%z3~3Q_b#)jO;rq@IJNwmrNP;A z?pJA7%)h5{32Ygl1gEtia_^qWXk+f^HqS7;Wa95r_NrDrV{cnT)rtRT0k1 zQP1}+3*y3k7>3WS`17W>4&nY{3IRXnOaHkVX6OW)euQxZZsuXx`OLzfmo9m4sxh2= zz{OOi$FPs!kLjlC^fn+p`kTj;k7VGx$#)aNiP=;KG<0EGd-EOS$(Q9c`EJL%}`oQxEH3RD3wgW9sn-VBUI6 zKs^|r^y6xlsYf4V%6!QWe0)f6kb0G0`tk1q9j>pYb74xp48!MhI-J5RYZ$_L9~15- z9Zn}F;pUsdBZ7GyiE!R}OhG-$;Kq7j*mLV~A>KXgX07|F3I}I-OumFBPkQXyf-wgt zdoIH}hB--(?aVyA>G^h9){W=EQ9mXqZeK98;^o(!dByABz` zSuTq7y`0YcsDvb*47A|51d6w8P8vMV#TMmo;>i;^Lq1kdo;4jWhF2`>V(Tv83IB^l zjwEW8XF*-^P~~FL*AxC1TZ`Z?a|b}CSB>8UzrYG6uJq%RZPnp7QOj(r0XS7L^<-O7 zybLuc!ha3#V?8)!=_(h`u_&i*bMb8Jdw74ugR?tr^58$i`?DUL^Mc=baLTDyJos~X zr!J?S9BU6=@?56Pk+@t(HU9sBmt`LOW#F%AU)KMRe0Tk`#czlQe;wW}E}mok1^96f z-U)o3OW2mbrFg;Ojj2mw^A!gFgg(lLxN>E?W&GQLNMe-{JAMf%AGJ_2gJkMQ6x0Kd$GzXW_8{?wCW#qiG4D(cCW`J&7j#Ua~@!|z3p|DW-m z;MZ*HufTug@&6m%=XvlngFgT~F|KD@OM%yV{2vD1?7>$8|B(l;2mVtJ9tFPJgRcet zTMzzC;PX87`8M!c5B>w-`#j-)0{j&Zz6JQ39()_{xqTA#eGYiD2Y(*;KK!XC$9e(p zCp`E;y#Le_{tv+O-16jDuL7Ut!Cwddq9^=G;O}_wzX4CQZ;q9YxaqFmo^53TZ}X&= zi}&T8_#X$p!-HQ2{7w&kCGbl<_#og@Jor%HV?6i`z=wM9vB0nP;FEw~;K6SJ{zngP zC`XuK(a@22G7bF3_-9k_!N6M(pW_V#Z;m4CVwVjdp9l(uEkvR6*xDV5O1h}y&(*K)`4?_;ki^P8p+}H|vGJm`gx{g%&#y7$HJLeVi`PVj&;wSQ%20MST-Juc1wZWIn`^| z8xG6cEsFzHRb^Fy5epx_SA`lpWjri(Q^sG*pP~GLt#8Ws;rzLdKiBgICci1;i}_O| zp^IRn#JfZ)l2}C&t?2)9cRuh{mUaKX&vuZFre_)GKx2QZmTVW_17 z!cdAo3pPY!Fx;k`j~n!y+(4lks0p08;!$_%Hc-m2qQVd zNRIF$V&q2{og<9S5k_*P@jJ@Mk23P3{r|?-Xya?N@ip3yi63V_EaP72|2N!`#_veu zcck$<(#Vf8E~AV~fghsrHOlxJWl}N9cQ=|x8DFFQ^ctDrMnj<=HzPm7NRBYR3Vp7h zYQr6AxFh|0KW-+(kw&J_=r1%fg}w$OS?H(NxQsU3(MGb!_$o4?7n!h%jAW6~S!5)O zjISaiUu@)yjeN0@FE;YUM!wj@r`Uv8Y>4`q8u1*Vg5Hn-Hs|kd~9ua7NQ`bYdjB)O)|}?lfNo1$c8uI`Ep#&NqkO zE?qpYx-wc`Q0PA=jq17oxSF};wB_!%%V$iSJZ0S2$up)*m@qXuZN{{*<0eOEq$?jD zP;Q#Jd4k_fFxSpY_gXNDXqQ&buby?m!fJDTC|W+RtCTtuBQ>Gi3eD*%q#U?F2PZhG zN8km18jZ`mM3S9Ax$$454sG15C6&eat(ZP*@wlkzvC^X{wtp@mIB2#Q?vP>~Y3w5Uj~qF|I_lEzUkR1`Vq9y(ivUcG1z1!^8} z%$R-c=V#2FHE;fm`HMJhm>#Kuk$PTlkCBw}j9tku80}|Wz&YLDD0!Pu`VUGM6i9s9 zqAC+Y*UD+wrshzGmwMMMm^Gi+F7&RMySTD4kjEEHonns4SvT5~lA z)f_jiTna{9T{CZf;y4uH&*nInUzW)b`~X}7OS-3@rb^GKg5iEnO|6{I8O3DcB$udt z1qHLOt(^UNof%xTkUaGkR4yL2@t5F=tS}?0RT0Z-RV1|`iv0y7LD4e}$AqNVpr!7(g%g0aogr((6r{>R? z7oA!#Lrr&n<-+vLC>Wja#@V6neWvAKT1Zrf+2sl)5Zv%C-FQJE{fk0aG|?RIq$gHI zq~)Z?s5IZ?LE1B5;*hA(rNjMP3MRk1Ea^^8wU=U1pb35BhbP>EDhn6P`aI*Asp=^e zs3-aPi)K-YO?^w~E;22Yv%WA)k2@{(0d<#W+Isp;XftNaUbbx3)$^7X4Cj8yycx6S zb98)0HAOpP9!GGaq+r?wiC~ydpT{qQ`TBUU51Z$gg4zR_DP+;F{a5j|=P3SsQ2fP0 z_@{6${t!_7FM{FkvgWd=y)W_mf#Pd#EBqbKy$J8|yt~27?|a@)MBnRqyFkhR8kGDS za{mE)maLQYZ0&a8cl|vb$^9K#a-&(NioX%eX7TWXrLSha7ycn(uuc;{-{M@0U$giZ zi=SZqB)Lm1#w|W%G0gfz`~r(tS&Uo!4w%gY!u4Rrk2uIBB%ZrK#q(wHF=&_h5s>Yg zd=@_8``B|L&f#zK#Dr&Q!Ybk2q}O7bb$^dXPU7dW7?R%8K8=(2!1KN> z+~9ee!Azb3_CZ%BZ@HWyWb>s4l-#XC{0%w5r^i`*0#rCpg9_(exf9O0JfM^O9Txv8 zM9-N#uvB?fV*yH^SE_n;7ej|%bkC(9pjk}p?l z@otOJJl|il5P!D|@%J*Qa{asTKM3n&KmNyp;YU4hfspuY5kBU5Zwr6H9zS~;O2-)% zKO;nLnWg^(O5a~V<;SQ~e14hmKiQMDxXR);Ew&54!!xu&;AYx^@Nv(J3V-5xvxLO! zW+C_VaUr5PwTR`5QO{xviX^uy~1Zhv$72 zl-wPl?goo@3JL$P zr9U>@=d+eK`Bq`E#$vO@yM*{_vGi{({>|biNBI8Fvv`@sYlZlGTSz^K75Z{NvbaSE zzyC2?g_@u>y7IVh<{)bw;*y0x~e#PQXEIw`V&lcYkDm~}_`BcItrk12`}ncG zziTZvS-jukvlidAm^04TcY~1l-(~Ru>)w03?|!_HaIdiRa*Iz}e8b}LrM~<*7R!YA zyUo%MT5PrWH;czaeYpuj;_-Ql%@!ZD_?*Qf79$gUf3t-6Yq0ozi#sj035mzRiN0La z;V5^t|hZJ88dQ_KBXiM)WS`MZ$Ho7vWRP ztAtxT?{~tx&<|#xM1L$AIqxE0E=!2qCoB#Wwy>uTY8;yYDjr{x`vac$I+&e@9^uKj zO#ufoUlX3f`CQ>3UT+ef%J?lj4SmAXdDbW#%z1p_5Xwh*2J=bbnLNuB4)wg%!m~)9 za2V}KcsAp>kTK^WA!EyLgp3WHLi+xany{4+x2Ulbyr^BMRTc-{~peZ<*9+WJ+X z!jB8_w?T-%%|iUW3TD%mBcFxdK>Y`^%ZP_)ZCm`NDOaofM*PvJidCtov>0kkQ-$aoAw=I;A^H|r_Zz`%>fCLX{)uSxJuF1u<3jYkCO-Lf^h{sh2}1M@5u)!B z>;7d>_2!$Rk^iL-xnB#BJ7yMq>hAHN%4eWx>f$ib$WIg!-wGlAW()DR7|f_Hs@fMy;I~NvEu0q=Lv2*=#?RZe*+I67(?GbLK-3S?Hk68DO z*Fb*c|^H$|^DsByXn*$9vvFA$b!M66ZHStN(ftV_eg}fehe<-xUoPB2xrk5t{~#Phy_Y+3$ItiWP7)$_CYX)x z$wFjq67sv1pX4_P(ff!H`R!o#0^%cFNWRM*xf5`c+$loj&IYp=kzQdH{j=P6afV5V z+;@e@Jql_*@JrzrJnsqNDeSKZ7h|tkxPp}6K6T*L42!9-DR(q}!((Y~%mXrUWwTRs_c0-I!$7tFb40_RWBH3MKQ8`M<`qK1eMU%pk6q@=j};Q`6e0S)04m&X38xUQ z5Puy){GEEe@2^6Lzu7|kHG=Z@fbdez+RB~ybO@1qONd;?4e&2xya2^762hM#gg-<4 z%UOq6{#wibj^%F_pFI4lkUaUj+|hH&7kxcv3ehtf)I8{7A!$B(xi5E~knk=PBDWJ1 ze@Ly*zg!6a8X^4Kz--d~8_^pW*De2b%lB6J?q`A7q;Z;%IPH=91EgDso+H8*ek;j? zA2ELc)m|?G75{1>;Vu^-ADG?9K0Uweo0!K4 zZ)SWJu4exdl)oK9{5>ng-=D=lo$(GoTE~qM4q?3@JcE82)HwZZ(P#49#L_<%J(Pah z(z`^TMSLv%qUd4lFI)O;(P#4`PSO_vweCB~(sM=kV;(L%k95nO_^!A7$ArZDNg?rm z5mf*Fs%Yf0NTc-j6CyWAh}<$z{rd`G3FEhLEd8DM`1_F%e~$?9w^N9}qhiP%&$tX~ zo=`2C-*VCTTPwuhcZB%+i4cEhe+m2!{f+Q@tZRi&a3&4Z`t^^Z@%OI9j5zM2IJ*YQ zy}#(uthX&aOmq?RaZ8tqE~foj`WDe6Cp+N(eoCle!2IpKEFSxadEJv$B9PobRl}L7NYky@pqB`LiGMZ_!R3A zA$nf|rS~n-@Q?X2^p(uRK=~UX#C@y~e^Z3`n+s|@TPzy6xDdHJgvfngh}=V<#*rI_N8JWJh4uuBE)tF2QsKpv zv+xq~AC%so2$B1R5WTyE=zR$^`EU8heifQ={$x<{<3*!)iV(e@6<$LBDL#6CCPZ$V z5WUX`(fcYWy+@zyMJG#tD)Cv=I44LfYdO!EEaCOTs4V+gfl2`3K71P$A)+ zBgFqCA^w*L@qay-eJkZF#Q&*Z^W6);Y|46_5cg-Tdz)y=YRcDr_ZTQWYekdSq1%1; z(}m>GS1r8@l-#&Ga3_tkK#j+>LdMB@P~&6=sPX%Va4++LZ}|KLp!mzd%-^ss1C^e& zLeg`$-02^FAbgm5AomTtvv2Vgi|<;@`6hA?GQJ8olF!1Q(*8mD8zy{~dM!l%BukeI zTZk8^crO4=yg(B#@f9zj;wAT=6EESz#7pjqm&I2szH2e(PUI9Xq2eV}yg(B#A@M4) zI7vu+E(H~zD?!C)KB)NAicfqRg~aDJx&NH{C?r1j%boaaxA>gJgBITf6(7|h#V1Ed zeENa%ccPH^$(GjpQyCq$DB zpHO8Uys$fpea|cFiq4L#X^CuXNf<~?+FhPnf3R<=)#Z3eR?rr3{g%F;z4CG2datu% znuT3gjJXC(iN^D>@!8c}al$g|KhghS?3H3H8EdB4EDc6sbhlBMn39@Q8?M$)>_1yy zH+E-&f1UFU=Vk7Y$E1ZbDSC0*u<=q*mgCU+HB+hKN;TCK#tcR ztZs_l?pyIy@@Of>*tc&Gc5^`s-_j_Jw%2c|Rt<7?kPF_V&SB}>xA~v=ASz#Cjztgn z_2k@|1GO_`BiLG~u0MRFddh0^ZRYyJeX57lA3nO~xABTxXTn>Kr${Iw$FROg<7eyE z@Mte~IAMXixaPo$Hr)E~k(I_bA5v41M5I(AvBSOzZ^jBn>0jtS`J0+vH5C^rzMiXy+=tYARA;%2ijSh~ z-mE_4>>oRXU(gcFB|lP$)Ko9+E+q%vCnZTU?D1e+JErjUvboJEO-4Clb0J{azT-vg z&8Nx{URSx!)m=@JcOL9~#gtp;i;4be)xk-*e^co$BLgZfO@e%Tsl3qSq+WXt78?#D1Va zZ8V^{;|hJ@&tyQysoXZt)p)S#pc0%`1x$7AW(cxI*j<(E8ymfCBGVWq-Fs?2`hn%G z^aiW6v+3@uYl^NmBg2F+wIpR^;2V(r;?dhr^$zJ2atT{dW^%&lm#EhEn*klls%~pi zqP`%!>Uqgy-s8KI+#^h9FZ5V_W}nPxbln z3`FD0l!V0Ct=^fY(H!!3@eg{I&%iL`YVj`ipTy@)?58bbha!!2 z^c<_UNQvpq<~BDysF;U0XNoU z2h-Tv-F_T%%ot02OzO5aoTs?+jaIQ;n&ZY-V@qsXqycNrM+i(`y-H67pREZvCE9Dp zE`76x{8#GL%Lar@pypq|kuJ%#^~NKShFkIOMpcI$*W*~Qr(j3Hk&Y9Ikr|(j9`s{x zI%iNXo&ol{(wlU8xAfWL;7{+hF4J4^U7~bXMz04ly`N^B%7cQ8UO&n7j%2|9T4t{w zXL>)#0vy9XGNS`ta{})J+-U7HQ)a&h#w>~t0 z&5ckm?7zIB@TQfOmtJs*cXsuHD(~#e%;gR9h7I#3O(~0d6;q?^IhyNVWZ(8!DR=fh zx$Vzy48J^nXYfn#ti969a4P3_PLOx$O_}wy4^n2{cW>^2pNISH{C4wW3pc4-wrOt) z*OMJ4T&iq*<~FBProX3ECNl_b!o)LC&3vTpOTr(uieSf{u1d8$SF_C zktxsc^ClrPxjr)w-h6n?@V?7^f>$cbr&BfO8~pOgAdSZ1sR5bK)c3kNkRE+|TXs0u2J^yI0XZ4}y*cwDC0zNJM|@=y<4WWe z-bC3qwzgOm-W=)a%|0&oVfLkiadP>Whx0ASwKEy`wdB4Zkh@Zms_!LT>yc?;Q^x3e zI3Oci!hyKAB4^$g0>j#?bNN8rr&u|~eLrz;`3QUN$R%W~J=+g$Z}t5Rtn#jT!oceL zz4HCPVByrS3#R>&4Z5@srg@p%`thTv%};eEC^rV$$*FESxs$k8mQpRuRnGslM_U3= z^U!qyKkc!(tK~$_eNg8VhNiaCC;g}LlRmlWdO4s=wB&TDO-TNOBu7;hjCN6kwuAgxN^kFT!rkjZgvFd!VQKg_MwmQBQR~ta%=Rd&L~V*w%mH{jD~Fi z2d7WG;1zW5Y6CN%08g^f6ui3H$fPq1Tpw&RGj;d4tIf+}u+kU2vWykXq^~Sv|1lYA zma$r?O%wmhGPXk1P93c}`f*26qXu(N)3TRpSn}#>qcfOW%8v~1EGw?^JPwy}mR5Z@ zIV0P<3e4lDabEl?&|Sx6yHzrzur=-vF9`8oL) ztlJb&{$B;%C3)4&Jd)-3vf=11@nzr7jq&m?n~d%fU$(2bUbP3XTCUgs(Plx4?gLd-^$tUe0`uX$O zH2+tp(Vv$-JMWPHSQ`IZY4lIiXgx!7m*R&J4Luy2JzFM}jPV@bD2+&CHpjR8BXSfk ztQQo{TQc_QC5z_sIhgWU)z@-_`u(OPyrW+@v2@;I?19KqMO4Nny0yFBy&)Oj*PMBa z^|F7l6h#;E(JW^vz}Z-^v~SEJMbMfVFmW(a=EGf9q3>!$x){heEHt2;w_o8Ij~#nH(S(jA<~uRcJzQ~_R=J>R0)<(gG>MT^S3Y~{$Qd5G zDi@~Or$}1vaP}n@d|scQsaitZ=FX8~&$^h%7K}j2c>gkbwz7SF!c6t64Hq;Zmh;eOnvEi%$hK$({eYoz&7oGMn*EyZq#^EP5m z<$T#rNvTPugk||c&ZfKyhLfI)_#lF*Y3P;p2TIwbJx~XY1qtiZ6z!x%3o2cHR9&}l z)&gZr&Ad5+s_S$^IgOG*3Z*8|hFtVg;y-WU63l=^=cS}{lyk*)i^*MMVn_yjy7gN= zb%vU^=Czo5^a{W}4D2Ofn7PkPQ0{Xe}mlNKO%(xqUEb! z6aOvCKVtc^u^!Ij3>hdr#h~OS${jsZgy^|Sh};dJzD+SV8TiPDeC|AnCZ%Z{xc=a@4LxYt|vHDEUVwd|aRDTD`v#BZCB`0Wy(3ET6c zSuFg?;$h(kcubVSEUE?wM|xhVko=o0Bt2Jy(*HTp=&uzH^1QDI(f@T&`tKEu{s)Dl zIHMyRM1F#@(eXRc$ZPH__rF>9-o1SHj|vIz1mQsP6IA*y0G0kKxffA>Li~SCcq(I+ zrJocQ6CRksfcl^l)rQ$i5g@Wi}A@n36@w{4i2HTH9;(3b@y|NuC zlnoW>e;Aa0*-MrFC&6qc5PQX^-n}G5|2snTA4i?cK9)0`p!lZ=Co=yPB6qP6xyyx< zIKwBrfOcs4H-bw4t)h`zCnP@K6B3`_f{M@YLB;1axwGIqgSxJII6-(JXWE66Ia4bv zqrM4=M-Fvf<$Q_|eyOD|5KiD72H{1_!-eF_bwa}b3aI+4D|EW%e9$bQNRl~=RATW8 zi_0zEX|cuPt3v#_vsy>1AL~VZ7iO>zZRu&2)*3_ZYbptJoHI~*|LUNiX%ilwm-el=^OHZ6MYss}A;!M@(kwu)d()Gb-ss@>f zY1cDVG!c(vnYFx-qBK`U!H(D;_~3jr=hEr%e4Y*JsKkmBn`4_dy%25+XGAvkjqvy( zw7dAVn$CC`-==@-3*p%At7f<}A{-yU|E2NToavE`qhqf%?5G~BXTzIU{ZZo?TI#oj zP}CGYO8nOw_SC$Xu4kj7l6Xd#{y2RA&x%m5hgLkGG!Gqg@FOEWJttmxW8<4OeL6qU z9AC;e=BtmBMEofC7>oy|FY#$_`!#!arhpSIgPNjmn8&#($98ZrACOKw3Dc3E>P()D z)^8b@Y2{|kJ73^_m zF`8j|^_xS*J8NFwHbM2*tKX9Q*{j^?y+nQapAL`mt3Nn~I&7kDpIVL$$1l!_aqfaA z?xkKRHdd!5TvAa!= zn`wH*wFg$-?;b4HZyDpCcjDpkBlN(`<@9a&{^nEmIjNtwPd1}%jQ>2bO*{RV$bXX` z11REPe$-~gvuHj$s>|YI!#u<76EDx=Xx7Eyn!)i*$*nOZ9{908V%DL~qwKdBLad@d{GMZOSp$30b6Kd6s+ZjcWD#CgV89#etXJiobtOGjR5$enM7Ab!vj@)TLRmqLdRS z>G@lK@Shz%J-eb1&$%%+B`Y@O#+2Z@J5vy-d1{(9Sxx@=6(uo{uGlt;{7CiXG&7gH z;%BQ(`8JKqieHjd{A|seaT1&x??=x+Al{pr(T~;}i|)0xZEvD2bG~OxkWs%dE7WcK zO7HLgyYV}Q7}8tj{=3G{Aam@|ZVp$(sySMfJeV?s z2~6XgvGQi5!|&Q6^n>^6Rvh8y?%L-Aus%{BeNfcU>4e(L}AP6KZ# zJg#hFljmRa9b}ex$!G1{vMe*_MC5#~{_(87RA&hIIPlHvpNM}2zY>1q`6c)qLf~kG z;V;Kov$W4zzWK(oJ%hmV(z}!2A%0_m{LAYz#e0ZfJ`0g_-T>V9^3$5FC%tdL-`$O0 z>CMGGmvvTmdbK_*hc^eg#JPjA`Y@lBHR+iQzvX@S^Wo!E7ylE=Tz3PS2dV&Q~X@q6pvH+Ngph8?GEUYgJgA` z$xrehB$tnjiJ$5+m-Gcyy7(#HCR{7GA0Zc({JDF!$jrWr+;lxc1$FsHH8ygh)h?w^ z;p=Kg-%$V7{1;EZFIsfxPjZ;lyRalE8C|#YbN8ZiHTe%*j&~n!y0^(Na(cheT~7DC zI4HjE+Cn;7A%gYAr7Pgwn?oge)OiA3xWO>R9zZ2g|EhgKSO1jP3Nxs0azD>JL%`Ww zPM@P42Hm@!KXIw@rT-_+o49xh|B>?_sq*>?tbeI44x|R1)7dei~QBS3Po<&WqgU2vGU1@^+W#NBAA$r*P!|*Pt82MZW~?#%<9VfdY{K ze$Z~*7QYZWmrCdK>A6-p^c<_-oNeS@m;BF#-xAS89*YmLwJHCpp6yJ`eqL-)nzXjTj zrQ+WuJ`G4?r|8F^?+VcSpiAtyC;pqzEdjbOjl_+4;tzy&W1MK^mAe#w&)*?L;k9gLM-z|D^*l9&5l~(@SLYb~F9Cd*qYS8Yk9tSUUQnekWh8?sp1)|( z=WD9?#toX2&ZB(i6gL~b(^YPsTsz9w%!A)V0)m>IRFazrpeu_fxP|vt|c)fv9$62BVuAEB|8}-5pk;8GW5!24mMcuuorX zIe=jX#eG7atEnFpUoT^buWu8F8RW)U_es|MQtN)5b+5JVx5=FbYo6mX2YSKsU$*?W z#Akspkp4j73%EVJ%YLHU2gy8p?#|HZn`VZ9>xMo@aLnEa;F^5U_GPfxFdzc zXS_u{-_R8aDZGruc^5(fV@~>L?UVVIdeN$2L z`gUS?Fy#gs{h;*UF84E%&$0iHXyl&~QvQDeCI1&t@54l>5S z#c39+Ev~V+!Qx(vI-4zj184`rF%~CIp0}j>Lp;|l95t%&AAPPnhq|Gw(EK0F7jpZW zc{EvXkSsQ+DL%>bc+_r?YHzNM)7HeJ+7!M1a}l#|r_J(UWNULe zbM!nWu_1_AiRoFP&F4-Juk7T>*;qX&i^OW$W3_u@o7r#N^g@O)2awq>_7vNu@yRz~ zZlgWcCth}-esj1fCyPf6ab!2?3DlIVmCq;k@Hd>MoD1%=`p?O_q|ZEL`A8y0M4(^1 zEGL$8qn;x{B_5om?%VPdQ3e?FjK^k4Afe=X4v)-C=6mj$ga7cyJ;&C*vwQA?lC(!Z zpK8kadR#Ur$Piu_FW$U-D34VX9iFxBS#jZzO~pG`CY}tjshaYTrFqD1ZPya7rqZv6 zQyw>>fd}swg;C0bx(Qh;AB^qX^vX%0oln2h`Ge->)OTMK@#8^E>Z7UYSrl1qdGYS$ zgPO)PDyK1-P?4+WKC!;351drq@neQ;wsMpx*+Rrtg`4^oD~DYEbUxBdf)fQXou_jL zI@h`UviTjzY#fpFVcwh97*3+i_-hg(br`k+}{_cT3;FW;^F4UMOU!*pA{?5 zx$<%48Q1^NUO7W-Vr^~uQ}PnY&A5_^r@4&YZUH?C>==llisgxBCaliy^1 z-SIczyq@2UDg63g+NGENz5Gh(@S`bwf6rNQdxM|GLG1}7^k3<}_n3>j#zf6u6Fl~e zrv>(mwMMUEjEnamW73a|#~65OP=@zS#dB-)be`g_c+JG$r-S~c)rTjrAus-V`0L+? zueh_UO?}Vw;-vpW@XLGP|2Ot{HOi;%@h10w#nT~gR(iuyT?>ZuwZF0Y_~r!*XD=52 z-}c4CgJi4r^xRd*jrs(ZGG^|kS%H4(a$|6Fa(%5#cXFixIqB?4pW1}e$27A?xoH8p z;{$T(`^+=peM^Da%gv2WfM#l(xMsr8noMzHiD1H2JXD8O<*1VW)yv)Z=v1ExDfthQ z%ST4~+&->{KF#CY<>IG&2+HLm=XjEJ_gAOM7ZTf(mO;h?xNkj z`kY|C+)Jf!<)Qhd`StyLqF*9X4`sTD%<>bmcolVoz&^*u>fYkaZH zl%7HITFoV|O!F3HkPfCs@__$qOZ5K;JA!juQ@;~wfCga>!D}zlV16M9F*IQmTm=0NM_X1 z2SJT(8gnIoR3HnaKL=W4m&RT3_0GS$#2*Ch#$56B{)e*ZR6w-e196w+%b>Nl>-e9A zo(ZjSRr2%Fpi6pvuk_}Zy)*Jx=w0J?71eL+&f%u=T~uYFG0EeK)DqzS;T8a z_B&R$}bbzf@T@3iiEUMG3gb;<9QJMTV~ zQy1hu9hAGC$;ka4>#j2na^EEP6R}Hf-F0?B?kCXv!$cw~%=6zdl|DTS5&!qr{Z%1) zKSDhg|5(uY2g9e(wygVD>#lc+G=QMzH>C*gS=Li`bjVJr(2!rLLGUe^!6kTYf=x0Vgm&sU!LBU>BNZ)%yqW{jC|dmd4K1M#a#a z=WUB|v_Em^_KnV639D6E@p?&Vp-bkmqH+E?7Aps{lJ%uKcWckVticCsD<|C~X}l(v z6PU&nVRbPF-6l5fST_D)&grgX5AB_k-g>WiQ|*YzkDt;B(aG+eg`mMfvnOE=qrU8p z1s1e)?*DLcC4MHqD}p;@_3wDgC#kl1HNEYAk;@KVhxpTn3n7skCV&0>NXrc0+HBGe zqxQVq3ly>^w>3d^v0GQ6cSqPY;V6AK8woia9zTV=9YWronwGa8Q{K80;EC5yCVkC1l*zHytZogXaHaoL ze(KyPa{o%)_@v}?oykw~33lQ}Tt5v$)i>!IE*%oqIGHE zil^%v{M^0h2IPX5^OCP_r0jR7 zMyPG+jG}+3h9s}9YvEvORkbrrKPeyTe`Pa-DXqDbuR3#ej->@ULv?Y0R=!`8M$d;< z-Bh0~eKl!()k}BDe}f}H(eX6;jx_o|pm+1Ti=Xu03%WjD^m^!alBs@O^v^+eN&jX? zfTDNsbA7zz_oVST=fVVZcG3h2o%Q7L!|kD#_gx8on8n=O#g&zwThYm`gjROm0w0!C zE2TOxC-SSVJ{HFg~;m(8nA_*m$U<9M?dRb4-|8nJ7f$qq)G*;Us&frY5KX4$eC zRh5gEELzC)p!)h5OY{AGInDRgru3|v;}GU-ht~LVA8Xw|D|glt>WB1fzDdYN)9s*a z4crZ8vhLa-ch)y8LOS!Upll7afztOPsBk_(S!um=j*!4hLD?L*2$Y_ga!1d6A$qk7rs*o46UA!zvz(U<5fh4$5S2ILdMJoo&C_o9a=d#9zDo<>3XxyV1b37 z(Dtp~S@DWIUYxGTjYkI!*%`~N-;(9O4{GN31cIm@!ghqVmgXMG@BE?l&pW*R # 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
lR^qaa*)kYd;aI5)ulS(;qOF3k`qV8Nn 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
?&e2)=wUPqX%AWM%pM+QQu8wjU$ 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 |JKes&cC(taQ>~e5$E4p`ka4j zeSq_CEgjCkwRq0IwRq0IHJS5oP3HVtvnT!AzXay@`2E((&-u4j9?rkD^f~{wLiXYO zTPqvq-c)rIqK zEq%_vwe&gv)@;l9w-(R&wx0WX7-He{1=2{;kEI4B70%`M1_5 zIsewur+;fQ$0wW2@yWKnI_KY7**O2!bU6Rk;yM3z?i`0~<>dTZD+A}>nm*^>nhxjR z{!Hz{`L`C&`M1^~8jq`6!hx2bu=KNc;C+FWT0H$*lQ}-wWR6cZne%V0&vX8*m6`Kz?LNr)x28V^ z+4AE2TkD6Me`{^Q`M2!5+&KT%j^+GYlR5v^WX`{}G&w%mt~nf^Y&smDY%=HHS~)pB z+1i)mlPw*NPac=8=-=A0oPT?%;yM4;(&7ADs|)Afn%v;XoPTTSbN;QR$?vyT298fQ znd6f!9ga^n`*8lP9n1N*7SH*&))t(9Yh~m7Thr(K+fJ3A^Kb1u;{4lhD4z3g?O4vg zwf;l@*3#kp+n4AZT#7lOw@T*xTdO1I-Zf6M1KZnru5oPTRJwLZ!Dx0XKV--- |JG#Azcn4szqNRd zPqwmge6q!Je6s0t{;kQJe{21X^KY&EoPTTa^lwe({97w0=iiz>=igesoPTTSbN;RM zPkz6(V>v$AbT~fQ;yM4eM(xG-`aha^KVUu^KY%boPTTia{jFy%lWrf z7tX)6d^tYZ(&6}IJKs4z+0vwcYw2+Qt);{Hw{|S&-CBWlR5v^+KcmVEnm*RwKO^Z z*3#tsTPp*{CtF{oe{08b{;lP!A|4g@BG&Sze{1(7`nQ%J(>I-egnw)0PUPQOAEJM2 zGW}aCC;eNCuYqiKe6IXk%QumKYu9@Ex28}3*5rS*e{1ba|JKSt|JM3t*uOP<9;<(A z`p>3+Yvue$__tR6XVbs6H0j@({psIYeAvIWbAkS?>4g1Ti>H5UZI{TuH68l5R))Ks zW9i@8a|ZoeOP~I&m52VV#V7J_O^5!i$@FhcrhjYKoGHkbe%QaYa)$j|(+~T%mVVg3 zwRGs;+Or7#TZ^ZEYx1+{-~Jfq6*u~~R<U zBLCKOj>o^Xd=vS%)+g!T+C4atfBUFe6D^mXkznaJ0*I?~rQIqd6Nnu&Z}J2vd=+OhO?tvrc*UDHqG>zdC%U)RpNM82+- zZ7KY*U*Vp??Rb1$D;s@Xlj-Z49QJiBp1!Wt{aAfnd;U!1>stEsb?tl)`?_YIu&-;^ zfkeKprB7ei^y%xG9QJih|C#!_c0H%BYiWjkU2D^@uWS1Bbxo$PYj!vuU)PR(u6$kV z8;N{ft8XG-*V3V{Yc>q~x|Yr}^>xiAVPAKpo+XaQ*R?*J$k(-e6ZyJU2Ku_zSC7@# zy%*O8%VWX6^)Hp)@qE8E8!q^_fercn)~-hj{%v3re!n%FEcmy9O&0vyzzz%kZD5B5 z|2D7#zu(%mV!^)+Z1PO z&cgWQz-|lUlLI@P?2NO01!Nn8ME}VSI96hlTOU zfgKjcCkJ*|7@r*2;eX=zk79pv^7$WKVFaq{JNS1a4Q zpi?ZJPRN$#KFE&;$#{1`wmNSx3Q+D zLN@!q($VL5*J0)L8pNATG9iCa@mY}Xh90+E$kr|ekS$-15w&t&>>RrVvemr|vX#O8 zX2r3Z`AWYEI@T7uAa9dxn;@I5Zh<`4AF$uXE!^hl+z#2&{5Qx}wvRf;x^owM5pU(> zJVvYIXAyss%HWRq96-F4=ev;2RzHAjed9-vEzO@o-Xwdva}9y0>9YBBPK0dfr$V+mz6SCyWY0{<)~0J6*_}g}hj=@e!*c~K-;1Ghr^@esQz}Nh zfFHk@+u{WIj3NoVm3=g;xyL$)+egluJdsUxRDwtBha0MACe`HHI{zfa}o{5LCq zKH{zX922-sWq2dvEnm)sGab%zGkFVitX_Pkw6?ew@n+8&$d+#lWIIQ0gKTw);#ix* z_Flx>Ir0I>Hjnf!$d;x%evk9hY@9jgo>{%_hQ5{OYmluj-+*lWeAJ151hUm-3bOU{ zKSHK2&W&U0tnS{w%(qt(WJ~`f$W~5{e>45l936KaS0>`E?XnpvxqP6YC8YTru8b|2^bD@$h=;_ZCA4zlINIafnL6}|8{G}E~e`ewIxK(;hF=gRun z?TC-53?G1OHn|J(Z`J2HR?W`GPaxjP(+k<^$oKk|?-vno_WTB9i~lxcE5j({la>BY zD674G1^G^uN7Z`@?nR81;aiaHo||ZXmZj-F3x(God7bi2wEl?Y#q~#$rO#&}vnS_g z*)@mjk62&g`Xg3`@cJWGmvZRXJ*5V+m51}QY~15pAX^!@{)naTK1YS$@0(6|{SnKT zJpxxW$An$$65MZTfp?W{)pKp(fT8HefSOZt?uFVM@%Qt z{4C3t^RuiEp90zD_MZyb%E|F-R(_6Ovt!vNme(rC_AGa->yKFan{cf46RtmEZG9PJ z%j_&$oW}T9zL%=-TEW;9M}yV%lDJcvAot=nu+FT*?lm){)ip>4JS>$ z-_Jzf;`We}{;{qyKDDFM+=G zC9Xem7V5z5O^~f#eCD_Q;Q9hwf5hUs{)qLl@cb-G$9;x(pWEGMb*?{Rb@{TBCf6Ua zbi(tqEdH6UKVmj{Hs@zqKX?6t@cJWGey%@aZBggQ;rUr+AFe-Q`kbHjsM_vW*B`Nb zIX}zl{&YUYD0D2}MC*^(c^96aW$}sTXIWjs>yKDD!|RV&Jl7wwvT^+plM}5!VtH}> z5liPSjvSt!W&Ql=e4Oz5BX%xu{SiBs@AvIK$n{4o-!aHmo|V+BN35J&f5iG2-|t&|cutm; zA<>*HOD8;j&FaEAS(ZNMWLaAr>-r;h9=ZNkcutnxi(Q|K>yM=B9ORrV-rKl^=VVzq z!|(U4UR-~~%FH=grq4N9CWq%_nLfv_b?Y9-Iay{0*LMrAKeAEfyv<2J(fT8HE^|(n zm6`sX-HVTPPL}n_@cVsBKRhSP&JnIZVs_x1EW4+_2(lf^@oT1&X#Ek>;rKP{d#?YO zX#Ek>=bS8)6V1soTeUl7yMZY*B_x@!7aT0h}FgQTe<#-<;(R) ztUqv0mh~B~KVrvn{F><`8oy@edw5QkrNi|{EZ^{)EYsooBPP@Twf?~O`&I_7KVmis z&&e7O%UpgGtzGNG{;l<`uzyQGhFjRbwfZLVZ_Pe?(f_Rt z!v3x0o5;VtS?5op^))S>2b{c))xWi4xxS{And@s>e@f)v+OdiJTeErCzn%Mj02^Dr zVgJ^S<@LmL!v3wruXc3!e%{KKXnjq)PSL-$yb}4hmL~g!m7o5t#V7J_Eq(g8CMWW5 ztzPtRt^b7mTZ`xVBX;e0rv9zv8}@I_H=uuO`Q8oL;<^5a^_j4LYdT^7_5}6quzzdm z|Jcck>yKD_h39A4H7k*SYwuIS>ucIIB<$Z>oAUjn*_P{%SbTVWP1E7}BX)hDe{1%9 zHvL=nZ*GbFTkB*0jQ*|JR9JznSR*6wY;Lp%lcl} zzqNKxbAFbklgPg{okVMnSYGb8 zMy{{o^X zGKAM0vAmAezqRxI+4OJC_o07lcV-&%YP zWGfH-TPqL0-&%VdkAG`^5r03z@=fI5+WABO*7Ui)rpf$%Yj%DBvXwvV-P!FD59RGggWpxaHzqR-eL&x;HA)B2O z`M1^w?skr)e{09mzqR!H9i6a$y8?ZP+p+q$mgckR-&z~dzqRzazNYobMEQR-&%bW&CmKlP)vV)O)DF}-`e#&?B7~j@cXTm zGm(F5I`nV(u7w-F-&(vo_LILKVe$O^2rCc2-&%h-*6+7wPx`l(&SQ|RUdQ9#nmy^? zTAI0z%Xb; zy-R%~(f3;`C%@lX`_jKPo72A?*Evi7*7P~nwNvr`jQ*{)1;5`~UG8_vANFtUJmUA; zZ>V1Uerv}j@^4=tJJY{SlYFfHt(}A6-;XdmC;EPCb)?U5{98LV{QcI_=l9z+YOiDUZ!KSbzqPibe`|G5^!?V#6aM`O zJKyQwS~^@))5>`~-*4~I`4aYTtqkGsx2MPsVgJ_BN#x&}O~U@Ix{?V3yf*2?!xzu)G_rpM#o+B15h@yS+Ce!sQ0r+;g83H!HJ zp0Iyw=h(6Ox27Nderx$A@^4u_Zi&Vx+jZ&z=vrRK>fhS=5dMB^W%~`%wDzTcYv&~W zThmG8-x+XI0)pW@$|{losP zwZ-v_Pqyds|Cj!))$4ftTdRB6zco9D{acIwXY_CFTsWTZw|2gSzu(@0bBWvW__ub= zN#x(!xg7Ry?Y@@Czn#!^gZ{0hb3Egdt?tkC`>plE@b_D5m*eqot$!x+Z_OX3e_Mom z1GnSxZ>^li^ZoWhwZ*aew|s8nM*r5%sqpyZxpr~<&*SlL&4%=Etxq1Se{07+oBplU zH<5p9bwAecw^q*M@o(+euzzdk)HC&O?Yszozco9Azu#Iv4EwiszSF<8W9i?Td_4ZG z^@n2}pF9+F+oz0AwselizqM-}{ab4bj!(8U>EBu%IX>CS@J#*NDa_IRg3iNf$nR3! zW+0!c_*uvwk$f2P|B>vS=y@NKoCNtdIyTvnmqC7qbe2P2p?k@xj{H(bKFyKS9r;X0 zUggN=I&!Wf|EnXfhiqlIknt+d#g5GV_Uw2m;_bIyw>a_@kT2D-S3B~xklPi%-H~@d z-luEvn;~1>>l``m$TvFj&5nGlBey&9?T-9DNB*EA?}L1^Z2nQm7fSvF2*j?PVx z&7QYFKA`k(g*>2i-U<0rlJ`JY&XW8q$mdIb6tcDZ?;&qe{2v{i$06I8f+rwb zI!{8jez@c$y!X+u&xd?S<$nQWenaPWBIMsnJ_WLs`Nfdw-*bBz{}W+1m6@NB#(8E9YI1KcjR$3E8eopMv~Z#eW8}^}WwQK1F$b5%T@g`7&fH z!`C2NI)jky`gT8L>$l%=J`8DRm{{*s~Q;#_Dzk+NwpK{{=0NI`a{^Z0z0ok4h zyp!k4u+))HaO4vmc?IN?RNs}5t&XXX?RuLA+0OTL$X4bI$X3ow$Sq1I%aL;+n@w^d zFPBc96Ti-pFLdNf9J$z$w>t9Gj=as0D;>Gok^N40(S{ALOUu~0y{R_dbWTxqZKRT2}^+&1yQ zb^nsQ{rwRQ36s*5h&dUj(xQn4$@FIu&2 zM?<6rMcdg>*Hq71AJg^|Xrar`Z8?ze`OZ5Pf2ZM(_TyhzFAs61mnI$R@fbb^;8ljd zu^p~fKV<|i|Nize{0|pkZYw$z%nfF~RA*XD|JC?odX_}535erHJ#J^=kNURz>GZOo z!}N41@~HO_gl*$KZtL+!c{KyrE_a^=5Jx++`KZT!!ai>{hUhKF0N+Up+ALo;Pwwh? z1Z!uZ5NKxa75HO%?9Ex}pF za&Q}jPrJx_f!`JrkS%;6_6@vzKD-m*ZZw$fZ$r5Cg8A@1gv&4Xyb-0>k8u7~^ZOr0 zIIU_v?9c5*Cp!eAGXE1<S9-P(pWGg5LRl zMQy^4lX1kS6=pwqB^Ko~zm&(Fym-0yGbai5qsJ9422VnL_#M_Z?&msCwlVygQ20EA zixJOzAM-B`?Y|-vZVQF)2!-uglzB40FNOAh2jOy*H4FP#UT=LcA7fW%DRzBbtn$b`=R12gZ;w@9*AzWc;an*k zZD)3FRWx>eG+td1Ir5;@bMa5jaqSWNj+X4|^X62JwmbVgJXmb6iye_=c5b}7CffMa z>~iMfH^uP?P;tajtF!#QN7<9T*59+Gt|n4@9cD*$Fd?&Y{C?5n?CRR;xN}Um3eQTlm63+ZjkOhZm9UW)G}T-^$0_@(IYC%h8AGPvY) z&wDMH^s3-_At@d23=pQ?H6Zn3+%kOUwA&fZfbR+Ncw7?w{r{=`U()^|#g8d| zQt^LO{1TjdOpn)HruPaG`K(g>>lDxRFd2W9;-iYcLGkZYJg;9&=i`e1yyEXs{6mWW zx#EAX_(ix5F#VH2mWOj$n9ezhe}m#LQT#QEuTlJsir=Gn`rb^3juRBbiJ|yG6 zuXw&2puPV$$%jR3i&j7;(J1sc7^dIAFt1Y#=O|pLaFN303Rf!JtT5Y+$9F2cSK<8% z;}+)cA5eIZJPTvU6&@#X{ItR|3Ma#UEYC6$`_mLoS2$PUJTf!5)-F07Yn?I-R*5mO zUW|*ppHiop6 zL2*RndojlIof|nLdU$SNc$vs|R}80%e2>R4-+z;ZVu@HT#zelSrCyuZDe|2;1`#C)+xEEOxoda*@p7x#+YVz1aQ4vHhrJH>tCe(``fAP$RT;-ok&9u||IAC!x0O0#@vVy2iY7Kp`S znOG&p#a6LH>=JuKez#{n2gM1`#C)+xEEOxoda*@p7x#+YB7cW~`Spu~;)pmd9uj9n zZ&`5MGI6DtE@p{b>!0Ztid?gw;c_u1Hj8ayr?^ktFCGvF#9?tvoD`?U!(uXAdgi-A zOcOK3T(Lkb7R$scF)p@>9b%W*Bld|0#UYXFz_T0^BG-Rscvei}`xJzii>YFUm?P$k zMPjK~Db|ZEV!OCk>=wBeI`iun`A&#oj+OAsC34JzUoJ6K%n)=t{)ev#kasW&2yi-*J+kuM*pw@h3qri)o(o>(ZBh~;8TY!=(ZPH~^OUpycV zh{NKTI4Mqxhs9*PU}Sk$h-qS`$Zw6@UmzBXWnz^W7hA;+u}ka``^1CdkT@z%i2Me| zd}qZZyy9YbxyWx-4D)*w$!|_%zE~udiu^Xj{qoByTx9yUmO%i#BuSEI3s$e z1ov0RLa&0?F_Dee>ZiwDF3aabG^ zC&g*;u$cT}wZE7qW{SCDfmke-iB)1;Y!y4iF0n`K6Ay|*;;1+wPKmQ(5*&QL{l!!< zL(CEL#Uim(tQ70T7O`F2D|U;$V!t>jj)>#pA#q0ZUZVCFSBmLkmY63NiX~#X7!#Yt zHnCIOC+-&yhy&uVI3`Yt)8b(<87~I?^IuF8GsRr7Kr9x^#40f^wu&8Mm)Ilri3i0Y zaa5cTr^Hz?2_Itp_7_vd3^7N{7mLJFu~MuTTf}y8uh=d2iv8lCI3kXVhr}6?FYx^H zUtB4si&#m@gKIrDCO6FSdy7;$E>^ z>=paPL2*PJ7Y~UuqW3DbzqnFN7qi4Xu}~}#%f*=3EVhZA;y!V|ct9Kwhs7~*Qk)hK zi^=I~e=$wW6m!J_u~;k=y^c5pi5RB+iK5Yt;VYN-10?i2Tm2gCt!SR4~4#cA=dnEYC`znCUwin(HeSS*%_RbpIh6+6T( zu}AC^4~j$Ls5l``iL+wTS!#bVRm>1`#C)+xEEOxoda*@p7x#+YVz1aQ4vHhPr^Ul!@~WV`E5tN0Q_K|$#A2~btPr$6;z}`H%o6j&La{_F7h__x*d}(0`^5d?0dYVa7RSU% zaaueqCg-UA#WXQf%oPj7VzErD660d4*dca_Jz}4DP#h9R#R+jroE4MKQ~QglVuqL_ z=8HvQsaPr2i!EZixL52Jd&PcnP#h7*#Y5tZ=&e!viz~%+F-y!73&j$#T#Sj$Vw>10 z?i2Tm2gCt!SR4~4#cA=dn0&t4UrZA-#ayvKEEdbeDlsm$iXCE?*dz9d2gM#m@gKIrDCO6FSdy7;$E>^>=paPL2*PJ7Y~UuqPJG=O@)L*l47Ax??2 zVp5*UC8mlQVvd+E7Kx=|rC2Yvi0$HDv0LmF`^7w0ni8G@2uR%GNi7Ul)F-y!7 z3&j$#T#Sj$Vw>10?i2Tm2gCt!SR4~4#cA=dnEd*nyeq^sF;mPH3&divOso>)VyoC8 zc8NV=pLkFl5=X@eaY~#Olir~A7gNOyF-Oc7i^Ni~QmhwS#CCD7*e&*o{ow0ni8G?NLG3TD6w}2lF;6TMOT=<9CN_(0VyC!I+%Fyw2gG4*_ z#lvE9f!be86EnqJu|O;q%fu=%F1CstVwcz>_K63@A#qfk5U0dhF=?aPUrZG<#2hhS zED}q_O0iyS5!=PRVz<~U_KSn!h&V1D5@$s3LbboRQcM@K#5}Q3ED_7anAj|~iJjs; zald##91w@aF>z9y77vTb7peWlG%-`m6$`{-u}rKI<6^7WA$Ey9VxM?W91=&x32{oC z6_X0p{$i?_A?AqrVv$%XR*Lmvi`Xvi6}!b=v0oe%N5paQkT@f9VmF_EmWeCHbTLcJ z6AQ%>v0RLa&0?F_Dee>ZiwDF3aabG^C&g*;u$X+Y+Fwi)GsRqyb0%4@nAj|~iJjs; zald##91w@aF>z9y77vTbm#AD~nwTl(iUne^SSD79aj{kG5WB=4u}?fG4vC}Ugg7P6 zib+L5IhTv6VuqL_=8HvQsaPr2i!EZixL52Jd&PcnP#h7*#Y5tZ=)Ey0=Q44nm@a0C zd19ehB9@CWu~}>rJH>tCe(``fAP$RT;-ok&9u|`?Rr`x+Vy2iY7Kp`SnOG&p#a6LH z>=Jv#KJlP9B#w#`;*>ZmCT&*xi>YFUm?P$kMPjK~Db|ZEV!OCk>=t{)esNG75y!=3)e9jj)>#pA#q0ZE?4`DE5&p%OUx4s#S*bxjET)+o7gGt6ZeY;!~tPr^Ul!@|9|TF-^=AbHxI&SS%B(#JJchc8FbKkJu+36ow0ni8CS>67Zi- z#Fb*Ym?h?kg<^?VF2=-Wu}$n0_lf((1LA-$K zl^7RW#SXDc>=FCKgW`}lDo%(~;;fjoP3#m@gKIrDCO6FSdy7;$E>^>=paP zL2*PJ7Y~UuqF1i=7gvhuVwRXE7K$Zexfm0h#Wt~1+$ZiA4~PTeus9}8iqqm@F*&04 z7t_Q{F;^@Qi^VdrO2is$e!p)OJH#%rN9+?1ibLY4I3Z4nvtrVAwZE7uW{5drzE~ud zij`u$*dn%zd&O?CSL_!D#Sw8_JS5JDUWM9UTq&lDSz?}8D3*xjVoYon+r&ES8B?Vq9z$JH#%rN9+?1ibLY4I3Z4nvtm+I z?JuT^8Dfr@FBXZVVx?FwwutTGUa?#375l|OaYP&!4~a9Pw?pkOt`yV7EHO_k6idW% zF(x*PZDOamPuwpa5C_CzaZH>Pr^Ul!@=mqCm?mb5xnhA>ES8B?Vq9z$JH#%rN9+?1 zibLY4I3Z4nvm)0r<9#(#%oPj7VzErD660d4*dca_Jz}4DP#h9R#R+jroE4L*)i1?V zF+?*muIRp);X;ie@i720BpZLGJIw$#Q5DQ&^B zN*gXA6;f=VjhY%LkU&cUl1oaJq|^&-uESN-#EqI=am{w)nq8xtR_dmev>2ir6>HXw z%DU*{3Wn8Kvn}?QZJy8P%xCVMJAowbv+nbIJ+GbQ@}BQG-#P!!nKLuzJ0muTZDN{|7Z-`S zVu4s9R*0*`2C+@-61R!l#Q|}zI4BN_qvDu2DV`LqHr2nFE#`=MVzF2*R*SV_i`Xgl zi2dR&agVrP91@R+$HWQogm_9!`+(|S42p}zLa|h=64!`LVp!}J`^25%ZgHP@Ks+oS z701PCaYhWZtNz7BVy;*qmWUPNYOz6V6T8H1;&yRB+$#=>!{VqoCQgbcMQfAlU(6PB z#5}QBEElWATCqj!6nn&eahJG9+%FD^N5o^|gm^+cC8mW{|6)*FEEbBTVwJc?Y!bs_ zx7a7{6nBgJ!~^1C@u)a1PKz^QphNX9E)sLa00{ZWFhQ1L9tBP#hLV z#W8VGJSke6RsUkPm?P$i#bUWwE!K)HVyD<6_KUm3J>q_GNIW7Q6Rn4pE-_oo5%a`i zv0SVcYsD6^Q|uA@#a-eaalbeu9ubd;6XFT+l$h43b}0tM#bTjYDprYW#3nH;c8h)D zPI0%mPdp$V7LSVK;rPVu4s9R*0*`2C+@-61R!l#Q|}zI4BN_qvDu2 zDV`Lq532sfY%xd76N|-iv0AJZTf|PWN9-4OiF?HT;*fYmJSI+vC&W`?+J{vCVo+Qx z7K)`}mAFQ162oG**eC83cZ>VP1L9%vs5mZ8i!)-NOZ6`<5_81@u|%v8SBni|o7g38 z6Ss>4;$Cr392Q5#F>z8nDOy`p|6;b7Bj$<4V!2o?)`~4+r`RL*i@U@<;(l>RJR%+w zC&UxtDKTxU>R$|si^W2*RIC!$h)rTx>=ygPo#JkBpLjq#EFKld#c6Ry3_Pm(7Z-`S zVu4s9R*0*`2C+@-61R!l#Q|}zI4BN_qvDuob*sL`Y%xd76N|-iv0AJZTf|PWN9-4O ziF?HT;*fYmJSI+vC&W`?+GDD3F(@t;3&m2gN?ap0iD9u@>=Sp2yTyIt0r9YSR2&zl z#Tha1Vb!;|NX!)r#1gSWTrD<;ZDNRJR%+wC&UxtDKV`_^)Cj+#bTjYDprYW#3nH;c8h)D zPI0%mPdp$V7LSVK;7lUSS%Dv#VT=)*d&Iu~;rvi?w2l*eUji z{o*chkGNkP5|4<-#0l|)cuGu*ss6>FxL7O{OT{X2jo2iH#cr`r+$ruB_lXC@!{SkK zT$~nX#K1>Y|KcJsS1b@q#0qh>*dVrvUE(%zyEq{36$iy}aax=a10Pem#6@DRSRj^& z72;~KL2MJd#BJhsaX{QF4vNF#s5mB0iYG;WFu<(a5VOS`F;6TO%f)K3R%{VF#U8O= z+$HW2_lrZ~5%HKfA)XLViD@5KyA*@sVzE#x6|2NGVv`sayTv|nr?^|(Cms+Fi$}$A zaax=a1D{a+i;Kiuu|O;lE5y}egV-i^iQB~O;()kU92AGeQE^P16imMxK|t$hs9BG zOq>)?iq@x8|6;b7Bj$<4V!2o?)`~4+r`RL*i@U@<;(l>RJR%+wC&UxtDKYI&RsUj8 zTr3ufrDB!1Mr;zpVz<~Q?i6>6`@{p{VezOqE>4RxVqmB0UtA>SiUnecSRt+!8^kuT zOWY=I7YD?>;-EMzj*4UAqR-$jbHqHcSS%N-#agjN z>=b*%esPz$N8B$CiATg^;)HlYJSC?6nd)B*ii^cUu~e)Q*N9DGSnL-2#GT@hctkuV zPKYPOQ)1emD_vqxTr3ufrDB!1Mr;zpVz<~Q?i6>6`@{p{VezOqE>4RxV&HRXm*OHZ zS1b@q#0qh>*dVrvUE(%zyEq{36$iy(aa0@=C&iPZHK2AWW{Wvuo>(lFi`8PS*dlg{ zJz~GOOWY&w7l*_n;xTbTJRzPE(>|~I7lYzru}~}(tHd>8lNc7e#XfPTxLe#O9uN=$>5d&K?Xka$EqCQgVa#8YD0Zq>gS6c>wyVyRdqt`VEW zu-Gm3i95yJ;y&?!cvw6tj*HXcj2QS!)xWq%%oPj760t&DEjEa4Vwbp0+%67?d&NO< zSR56{#7Xg_Xg#U=7qi72F;6TO%f)K3R%{VF#U8O=+$HW2_lrZ~5%HKfA)XLViD`eO z`WJ)ZVzE#x6|2NGVv`sayTv|nr?^|(Cms+Fi$}$Aaax=a1AA2e;vz9uED%e?3URgA zAhwBJ;x=)+I3Vs72gPA=R2&m0#gn4-Mb*EUE#`=MVzF2*R*SV_i`Xgli2dR&agVrP z91@R+$HWQogm_9!`)k#|7!((ag<`2#C9V;h#IV>c_K7>i-Qqs+fOuFuDvpcO;*1#h zlImYvB<6|*Vu@HGt`-}_HnB_GCT5xDN6Zt8#d5J) ztQA|tPH{loD-Mdo;;1+#PKqZ*>u;1UF=FCLUE&^bzc?fw z5s!%z;tBDTnD)17mts&{EEbBTVwJc?Y!bs_x7a7{6nBgJ!~^1C@u)a1PKz^Q;LB>4 z;vz9uED%e?3URgAAhwBJ;x=)+I3Vs72gPA=R2&m0#gn47PxUWmi#cMRSS*%{)ncvK zB6f;BV!yac+#~K6hr}b|F>yjXA)XS`zM}dUgW_VbP%IUz#5H1*7#6$5K5?hGTihoe z5D$w-#c^?3oDlmMxK|t$hs9BGOq>)?iq_w$ z{>5xDN6Zt8#d5J)tQA|tPO(Sq7k7z!#QoxsctkuVPKYPOQ)1eF)xQ`N7mI~rsaPeh z5u3!Y*e&*nJH_4NKJkEfSUf6@i__wa7u#R9QJtPod=4Pu+vC2kY9iv!|b zaZnrVP1L9%vs5mZ8i!)+iQ1ve^5_81@u|%v8 zSBni|o7g386Ss>4;$Cr392Q5#F>z8nDO%5{{>5xDN6Zt8#d5J)tQA|tPO(Sq7k7z! z#QoxsctkuVPKYPOQ)1fJRsUj8Tr3ufrDB!1Mr;zpVz<~Q?i6>6`@{p{VezOqE>4Rx zV&Lyp|KcJsS1b@q#0qh>*e&*nJH_4NKJkEfSUf6@i__wa7&xGGiHpQsu|O;lE5y}e zgV-i^iQB~O;()kU92AGeQE^P16i=Sp2yTyIt0r9YSR2&zl#Tha1 z4b{K6NX!)r#1gSWTrD<;ZDN5xDN6Zt8#d5J) ztQA|tPO(Sq7k7z!#QoxsctkuVPKYPOQ)1dd)xQ`N7mI~rsaPeh5u3!Y*e&*nJH_4N zKJkEfSUf6@i__wa7u#R9QJtPod=4Pu+vC2kY9iv!|baZnr-Y%xd76N|-iv0AJZTf|PWN9-4OiF?HT;*fYmJSI+vC&W`?+OX448tt(_2T8?6=Jsd2JuRf(J-8A@bhjp z(O=wmuN_LWJJRhfnRa=4@3*$zWLKr-4;{ZK7QWt!45btu-1>&1g6BI<7Ii%z==e2U z-oN(#7h?ObXE^yoM%Zk{_?0EgGU2V7Jazi?>Bn9`nOcuc@4{aM9}A5|Lp>v*v5O&( zghm|&i(xQ#YgM zAj2qj4z@#CBi4L4VCS)6rtp2t$GZOfmt$K-k6+UtWgy`kPi(2-+i`T{&^!~n9U3oc zOMmnj65z&e*JLr+c?{MQX6$Lmi07zDQ%zL2!nn~$pUPe&sjMCBA=W0X>Q^RjeB*@WqJ*Vn$pdH%nEAif; z&hNxR+oQd0@Md@no3Y!Wq;RkFguBD&s>+VxdbM4X7QO$ZU6~&3n2ByV<>@ZT{Uh?htP3-GCUI>3%aIQTFAQf! zPuMuHW5(WcDms1t3;nS>gRw1Rh&DZ1;WT@Ohkb}ZFZBpRY;_=U{>yL#-qoH9IlBe?}DhLfAqh|;K&J~u8gVj;pV0&NA z==l>?%)O<(FJ|;EWhE5k%M#@xI>E z;mh6VT;eFG;x9T+QG4d2$J~gFN4(9U`9+4Z;(nBZ9?5Q7jL{|2O`J<}RGvpKGE|%- zl_yEnt`r$wWJXVx|2gv4p4t2I{}1x#skz6d`_R~MepAo2x1{+_Zh@Rr&@hKYL%T5K zVRXnets9d1NUU-!TG^+r=5}PYoyeB43o?4^QrVNo?Y4CEqmN#WejTeB#@VWJG+MLI zIU7VP_s48Rg{D8?x@?cu>^%OVb^UhbeselQ*a*dqHnL?D;|nJSc4)urh@_=+cpge& z_qS^XG)Ax&nOxYFS<%Y9ID#X%GGN#2a|a%#vU2b3ZRyd+;YmP*#4+o}x40jGZ%QJDJP2*YIM6f(QsfsQS&?n6a-SLc%VbOz8gtJRY5l%p@ z$n$}s<(ZHEv)$1@^-lQMp+pXA_P9-Bs?yYOyq=I6_5!syb%w;b&=mbt4v#??hul!& zLn%u7kXx&9N7T<5n(m1qY5wdEDrjBlI3t?KoD;=JS(cd`mjxZ8A~0`i;Xkp4|Y{n^5kPAWG3gPWmRR4guHWfZ#%>IbYb{z z_Y9TjqMn(9$v|AAEQ?d*k+PtJTBg9$(9L<-%s+Oa65LQU@k$=M!iAoGK6lI>rK!zm z0i0)G=4`sW8-8-h!if!=-G&t zKQdB?!*GunC&hTJ#>(=TkVJw#XVF+$@mc)JBZsQz_D)>cqLeW;aC7E%mZ^Wmr8L^B zU3nM-@wO*8;9PKfInI<_X1wY@6i7>%YQw&Be)vh~z*HZ`U2j4U;G)s3Pq*M$k*VQa zw-To=VYes?I)&{_n58;($V9ZyO&QM^Ws8r0(}~Yq&y@3W=l+wplF2`fD;m#m73s`N z3ttwUNxEn;=kt;Rcfyou-@|F<=@(-)W17F1#&;Cwr}(MDt~nYh3}kTWG0wrUU3e*7|~FXOo(ltmyhbbC~? zA~UBuerjgi?opXj*(^ZRQ(NE}_No}$kM+AJGkRCTW9kw7ajrK)<5Lw75PLxm^qs`$ zVy53*AKrKGs{bAT|9AZ7Ewnkt|CP8({NM2(<#V=C{C~%Pb86=eyg$nL&+*ON@5SJM zzg@zI3|=|iE88{cPzl(j{d`8?-EjWE92aBh{jtC|XHcc7ccyt&j6cI)><#aJ+?nvn zSw1=Fllf2to5G6>Rll&ZZbRcH>s`$ao2-iF4b9smS*t%}yxwqWzdU{&4v#!bO+dt;-;UGry?wXC&cW7sOiQJbuqdsZN%O^sG% zW4NvXPYHwN9KgYu8|F6=l!TE6f<^1`dNV5)K5XIq8%(!c#Wql)M{@^_8 zdnsE{J}i!4>jMuq)`x?+ZOC5mx`rEr&6|P`x3_LwZ&DJ>y>1hpo*3QpQq}VlS9jLH zs$1LM+S0hWu_eez<4KrRm!%%8XL++a!smVD`5xE2vA(sv9VNg_a$CM^+1rD;H4h-h zj<;2yRkXJT3zp#DTk{J#jO#5o8i!jfdr{5{dY+-W##BDae!;aUi zeiLW$GY^{P2y+pyNoVm}1h+!@l~KVhm-5F0Po!EF{a3@k3cMO}+<#?cJ~imi4P}nc z_@K})bPC-mb*Id8;NOO0UqLvWqs7Cx|B2Mc1CjX*;{g2HP#I%h|LQ~>V@$&Zv-<~e z%r^Y;F0`z7BZ2^)Eym;Uq%(-V*N+1KYbL_YXN407(|82G5?rhF5lMU~k$qo5F4Ir)Q{nmV@);c~9fIIsG|wVhEir?0g2E zJeba=RtPOK6wl`AWB`LahvQilm`DxLv--0H+>x6K?X4_GmURA-d~3=2`ueqvo%M}v z;k79Fmd0d-0*I&pb42NV*k89~?b`L7oom|~+c&jttZQiwKeBdnp0%XDb;E{6oKsXa zYnyK^ymbj;UfWi`Hr&*)@u4LTbXrR`wuT#*EMHmk)=lBM`iGpb8=KayYexo=l=jw+ zHZ+y<-Y!6!; z&a>#P@#rl(i(Z3Ak7;FI`Sa(u#iJKGiyp^iw_G@`%@tmkM{oIA^m;sc?>LKIpGWU5 zj~<643@a9fFtZKd@7uYEKpTb~vt5P13$#yc&$FyO7}wYicz2QcV7{)ykKu7h<~HUD zi!$}N-Gm?Y&!vZGob;g`avMi@=G^3nmYcp6kWD_McVZ5`2Yq@L7D{kUg}b@oJq`zN zctPlybEyd_CfD;3_u&(3&jEHr7FN7ENF4t z5>?&(UC{Hk)8fKJf8&}L>apEDukhHuxD6w`#m=tz%Q*S_2kEiDb35USmpa@grRPYN zbrO2s&DA?4J-1w_*W(H}z|F@D^t|~fMLve$e?5M0mLBuLvDxiI*tI$_5xCeBo*OUe zakdWUATJkK78mKb<2c(irRrH&O6&!^3XU=5-HPzcs5uT!mCKLbwvc&qxT^ zOO5wp$2m3Wj6;8K52ei2Pl+wn%1Q{>OHJyjl#>UcR11yPv!$AucETamO0K+Ai>sy* zTdKv;FtMeY*_T&-V?w}Qs>PO<*iwC~u2QXQ6Q0;hMGdDXxm;yR1l6VODwCtcICGUr zQKA&CvVzb|l-gBhTu!v_H(GCj|1yP!YZ2>h*mwH^<$|~$ciw0f;cs=^?Tr@CHRW;n zDqJd~?ZxFcT0FD_(3w*kw>MfmA1A`U%6b6udyOCeTxB)kZ@ovx zWvbQUk;B;kkVpO?_Io^XH}>D}ksrr?%p><<|0$3B3G9E`Bk#oi4v!q)#ZIaz?SxD6 ziaz>#dmd$P52NhqU?x0X{Ux^4_}STUOSN#~^=zqTL`yiNCXE~ne__HCd#OohD9Y*9 zpG$*n>RPn6uSjOfu94^2=aS?rt*=WiLwuKFe0dRa74~^8NZCD4Fj<$*yT-cGQw1F7@_h2U zeDeK1xx**(eu=v=yq%EUYe~lcHJ|^mPyPp={C%H1>68BxvU?rM@Gtf>A;y2DPY(Lz zJjm{KDvvLL>|U2rZuRL$eexH4^0Pkqdp`N6K6##}i8HXR#c z@+zO)=943k-D_yZ_c@>cmwoauWcON{`te1-_4U@0ie=Gdi1 zf2lck>CM(G*Xd`wl=P_kuiiagp6hmxYku+-yWb~qt?u=i^(x(?;JrTgIQy^6yY0n*dd}-feDqR^7H7Hy4^Wu3weE)>=FJ z75CcZ6?flxN5$H^%gR=Ts@GQEac4yc%I{rSP}*D{zO|*b^`VZoP*uGfCcPAV!8+%T z16*#oqrJWEk(+TjA8Ph$x(T?seggtog@9`|K8(b!y{B z*7oMA`VT^AXsOx^Y<&1Z9$1K5mk;rPW%;2hCjrRhEVmv!k(B1+1_$H<7NZf?GZS=j zlj^FtcaBPzI)}J&{?hiwI#Uf!S(|dIDq?_lgv0HdkX8nlaA5LQt*tV8^ik=V)=`aH z;kniI9SeuIwFj;r=Hi+}}^Gu&l>H=C==Iet#(U zm%#;?`g3Vo;2z7$ByoHWxB!;`H&bT1C_}HBGW6Dx&|5F|kgF`~OC zHMq{jG>`JNB;*1T;gpd$ekECj>t@OIlDB|Ne*|Ruzd-lZh>yf^!{mD`>qT*#M7X~e zIh_n(a-Bv(|8kP~6qkx6;{71ws|OihgzkvXCUN|367hXi93m0kcg1lM@lBG@e_8GU zOk=5csTdS*0~z0+fQ;`!x}%&TBpT_*K(@orQAYV5ri@Fn?~}Ox{V|D4uvh7ic94M! z`zzVj~vas2B^rXO5zwPh7iMn2vp z|5YT~Nv-52$sLlnNPZGzx$Xs7uJ268agBJcKqCD2g9~s&a6M&&-%281yXhXpctE)V ztEWilAEWy9O3Qje{0zCyvi6C; zA=jgyybf%#thbQOmh}#@(y|&zlz%&k_SX$A$icjgGQ$5X3B51T{W{byWu#|>GRC(b zN8Xwx8NSBuH0^>i!v8D@y)V(7?SeAXPnqpP@<|eUDY&RL?E<7;4hi>s zy0cx#y^=E9h2$2>Y!{Lrqs(?8c^8RreoS|^3%REv4RpVnM0`s~vq9Lc3(rQBO2zb(JuW*9@pw{zN0-ja9A`Pxrrp&fB6 zFn@D#pX@RV$uxIJNMzf{=z?ae8N?cs(=@_LqpcRKHLwoP&d7K=Kl)P7i{Z4$!IX^W zo{whOaHTDmv9WrZhsM6azs~xRNJ(}IOdwr*7X*eyFj(YLRF$^5+^)g``E)z$BfT$n zl-q5vc!_qL+?o&D%0V<1%ifY+RMc_h)K=`nE@Ml2tRStZI3?O~BG#50ep~be7VX|% zbF%9f`9qQ6G-F+fcxW<`33-s2^4MS6TTa*=Sum>kzI|U#?~7Z%opLbxs@;*9KV)yo zI-b^FbVttC!RWW`>JJB^S&w5Gd(p_F#}#h$dwE0056UnpvHtvCulZ(VI@9hz?$Wgs z4O1B_zHV}50PD~$*m?=pAddw4;bRsYf4k$Q$Z+QS-Vf_Ev!3yPCOj@^N7-P3yOvR7 zwI>~%6~*_aam92Xd}aQN$1gPNPqDH(k>q>R9{#mf$YX&$GZJ4mZ*FXzM}E#8|H?G3 z*!%B^AL~OS(~DuP>s@ENB@64#zl?;VA?Ckqmt;mm6L!r+{t(*4tz4>#MOJsE7o~*X z8Qn6z?zvnT?xN`(UszO}AGSOT zt&J)FE#t@cQx8c)XMs)I716A1u1aJmEqZ4bmy@%{a3QXJXMFuSQV_iZDaf2!kFI>C z{RBz}hPX-Ab?6Q-3c7;LILm9Rld*j$<7srWtoNZen_iCoZOXS8BZH@W?F(%SW;<6P z>uCL0Ozm3xWb}R*DU3WCNHKP-Ti4qc#FGhLM?(gBiqo3yB zQ0!RUnRGLOPy=lS)%RD)jMEgnCUJxcj>XQw#(9y)cB(GA zHUXBa3EM5CejMP7f03{L@5WHK^=A7DSll_~9r!9rW}zFBeT6FKm+oS7*C^7y;`sD= zg#T~=WB7kh_<#KRHth+6fN4@NlET9ONpvfgpe~Bi{v&7%UUEjt z%%B=A%Svicjvb3e?|8x9n|AQ$^DuN80|uUvRd>h#+UPs&+pa_toIy%>u0j{R|D>nw zU}Q4si(ZZt{g0%lFnYhYC!lxWWV8s4+@uP_8uu*_H$@DcQw~gKcy@<-x;d4>kl2{0 zQwg&a+GdylXanwcpJ?c0+(rSrDx9SDoP0Xx(CDf;17E+>qT}-$V}HOoVDcc^XuqDx zMAt(f>+PdaNQ{4FdBHInM%zjNx_$3Ft(Vw6`C7(H-0P zH?|Ldj~8>i*x}@e0pn~$%TA=$%oS+}*lX004U=~JS%w=mf9)9aY4jW|GM8nplS>i%3i?>lub;?=a!HComJ(Ht0o0QX;3*ItHV!*}aV0$zst+ z#^Zm1AS16~cJVTH>>aEnJI1muim~iR0z3g)89hsxN#mq~d6tD63qF_;6(JU^P0GgwioXkX~bv?Nm2fUlt5k zox12{)ti=SMx;fyQyJ(aPS-Fs;Fda0&W$&lVZ*7(j?H*63R;_I9%$;?-oYlqdgFXA zGL#v0qVaT)sOiB|pP{X>(^v2Gl&i-u&lz1zViA@##a?CHIE41nYR*Zh*>!s<=03-N z9>1Q$46?#GlNeRKqG4-V(LZH8ei1v%maIU=M{C)=%Cd^eGBaX-X7=4n3VUTHW=^s6 zD2<^jvtX}z@b~j#S)YhjjOM_)GZyGRIG&n{Gh!7k*)l%*1tb&Kcd^QUf%#nJsBGXW zk6>1)!8LUF_(G?B6ur9jVYhu_j>Cb$#;ZCs>>djJE6qpa5yVOd18i$H0!!9J#}8iy zqe8c7!q+L5vP=#Ip`(F#Ad%A-BB5J*agt3*?~jyarbLD-oT(?KO&{ifmxoy%PgPF0 zL#;V;$Y{;56KKuw?OW4u63>VnMES?kpJmM)zkuT|ufy0@%?NZbP_#Ae;p3)!KQ=(s z&;--(Imh5S7_;I;z|6=!34i6sL>o^g#u>J$vg9j@GBYtxgoG)|R3YMY?DQ(Lk+jrG z%rpDF;W*a^u+K|nouzqCiZF@yHW%|kB@9xq<8tiCc`G6^l!_W(5z0C^GcVe^2Y%)d z^f%{iL%qXra%PCRZP3{Wwc@OUQqA$j2b`*6#%f!7cqlf2r zjMFAGrqMPziHC{zC3w$a$Ga68%ft;WqxT!^MW$4g@Yo=N(wX1M%8tEoi439ec4G$< z1S;@6VhRHTHRN;UC;T4!De66gdt{dVEaUjyli^Z(2aCy$nIbuB@_UCmme1bg&OaGb zA4I{S9-LB5O37}VMv;=+W8?VSvA`+g;_xEdWZvzu?kRkVZ$3bMvN7Qt*?nL>tK=OW z-^X!i0>vGN?HyzE`xX3NPp5ZuJY}1LJJe%ztyu3-D434c`wJX=sK@A8-YVlvp(mfM zzL!pkX_8zzYAs+8G1cWh@N zsb9uBv~k6C<0qU}_Y8xJ{t%7tF*|1J@8CRttzSJyt^YvfeMY^1@Aeq0yJN(y|L52w zOttT4g=5c({T(8<;?@5wD?QN&%==pKP7{+_Q@f_}xg^UrHRo2od(xOHvC0Fy}yX0&_1EJSQqAmU}sSGy}4|W0#W@T#ev7FgXv|OGo*jI+$zQ z>4KiSQ&Tr0BhFBUiJLo(m8G}|-Pn*jdvcETjxrA{MJHsGb0SA0 z_9Ua{Br>moFT=bC4wG&uT?R@hH>bj4&;A19@gjQ%M*=%$ zQV`C`L>VzhkzesDBi)?d-B$sbipD@4H9NPP8r%GhsZ@mS+%L!MGY7Y+OvP&ISrWi? zzVp^7yhrh*sbEuoj3nuTJ|})BGk!fEnLg+J2wt39nBr?1i4b9}%lR^6O=ppw5v$Yg zlI}!IxP1`a#SO}xFYQGH47SFbuP9zNXkIjkR|z(L-rQXX;g)q`DCU)T;*LV7Kcj~e zZB(qeosj=BMjNXe=Z-DAO>&%>!boU49iw=aVyG_`8ix0VD-kSvTS zEKm~yo9pM{R@AXQ9EJtC9pdW|QHSP@l12qR2)D&U19nYcH1O3}SxWTK@vq>uQ{70c zy`u|l%N-tBZ16_d=9FNXu?Yf)>g9&~Gy+S0ss+dKJoEj=?RL#}yc>pt7OTY^sxm-+ z%sp?OXKVW1?vga*j@Z4t;BoTgoSNaExY(;q z3%gK%N5NzK#EQm4QxJ(F@DGV2p?+rh__HdB?PtCc2`(DX+y=!XoDJ;>%?S43X)je$p+zoD+pdZ2NA^Tr3()i>3(TUddmJ-N2mZCu~zI6J%d z8~YfTjkh#xydfNH#iFfX$HwOR)`rIF)*5FgxURXS(J}l+_Gz3>vvC+;(ML4W z8rRpg1Ytnf{s?swVJ@pgTI2C@C8W>OiFI9TyJ9{gEGK8d2e3Nsp;^M7Mc-t3&I6FQ zczR4Z)HgRI(tGwYm|OLK%x;_Asn}_r*3BerdY99t`>rQaVZLmvP1eA<1V3Kz#BF}D z%VRt7tHSSj{NjF93A^W=a1NsVR(ky_BLS{!wWayFa_;XaPEyxklAJrQG*T@Ak=#<5YapNZ~*In;>X{YuyIdAT?Vl}WD&xN z`+Mqa51dOdwYnd11oAyP>k@6E0$~gwF{SX1hk-T`ggA-c3HWt`T#pp@R~~|JN=Kcv zy#Z?@k%mC6N9Vmx9RFqe_WawHVSHZZ9c7EKez>A>pI@)oqj&vT^jNoUcyICOVM(Ed>a);g%*HBy+G9e8 zreiibp()0q<#rQ()IXPA9&}9l*uJr4B0OG+ zyPKOnEG08~QnRjt-lMLP{3t%8{iPJJeFl0g8+T(|{C!Y#^~RyMnjYGi4~j9-wP`B6 z+9?mInX=)26hCkI4HhNpgXbBB$MWE^5QfWqb1O!8i=AEbmwx;WimvTzlP_NCaQjF6 z+?Unq_cLu@-CQ|`oR2Nv%aSw}TJM7F)*)7mnz>4% z{aj?ut2nJ`Tj;Ulq|-&#TKrutU&;;GFNw}ElWmVh?LzAj z$h+ms@YpAF~YZvzO;+1@n^%s!SJaSwW zJE;~@TF)EwEeHb{_~P)cM-&o^FjJ^ zj^%Eb&dabK^2n^+$9(cfAiMKL9{<;nhw$V4kMei0UotNtpP)Zv&j0Ao`H;IY{A(eP zqa(c?`}AMo^QUcP5Sbg5|ED3lb3W?RuEX6J-uc*0y7NIEe-g*L^FPWrA}vAmW6t+X zdLVau+Zjau9 ziYp+y^FjJQ?DOC5llS}NLq7QjKACHs-Hqj);ge~{;%@Z639>u)WP0v{?9MkS)1Jkh zTT-^pm=P|ir}b2YdD{>@%i3EvIEI17o~|OFCTFfk8LrXc44Y5Kc$0ex15snj=~#Oj zM`QA7EI!X_CTeUyWhLtD-%10rbIo4QVFfzd;dt8_%-EJ~3_E6Iv#8`R#odkg^?2yP zst1iV<^JAm(o)*Ao>7L$;ms1QYtZOMCE3_|#*H&) zIj*RoF{!5KD(Rc+8X7`Xvjo7ho$DYsQFHpsD0G%!U3<}4yu3AA_27feRZDL^qr9Ac z+1yMs%lfuQ&Z7aGGo&+ZZf8kb{%srT9%?MSvpJmT8dbEjHP*JXnbodCbsMY9SwdTy z-&WU-*Pi)q0D2n3I^G$(wIE?lnq=uqi))zoHdfU)R~4>ZarfG?6%`?C6W;yS`jEA0 zQ+?gWb=JE2mex&4rn@X(+8D1jFArN=-}KPhb#=`xYjI<*u4Rsr%+EvnNc59>lsux@ zICs(K=b5bWwj-h|Yp&WHT9vof>CE|6tEyWcYTVfT!Nztb#`QIEdp&6}ZZu&u+gxQ1 zcH2LXdsn@+zNPhnx|XUsy!dRBIeh7Ik4ye-ywMr2DUR8mvSk6ZBL^&jGom(4oBkWx z<|vY)4UO&V8=1jGm~#zQMe)Kow{HGzj`E7qc)}A0(L^2Z2g00e9xlEYg9~rMJ6ga1 zCg-%prF)m$c@K^5hva@l?k~xm_gSc40WzF+kow<|`w!&)4a|jj&*wNu{ojJr=d+3c zE@0jY(w(-mbia%4xZr(M#Eo<-a0BLFB5$fwe*sASE5N|5mh~p`HrRTRg?Jz%)`HYu z2U7n-bjM_$Hw&r%H}d~G`G1G*xSm{qb3WsJD`?UO^7vJBhkql9cw+MZr2PL*{@;}U z@8th``Co{6Bh#BfBK|8$gma^~24s8>fQ)Z1-BGUJB;SeUY4ZP#{EIP!hhwu!{r>}*`U^0x41{n!1JeCgknYvs0$d8#(|@^T z^^%D93uHOojYEG-rv9G9h4&o`;l2VkujE~@H6!0;S$_d8z{T2glq+E4E%%Eqa^#aF z+RL@+Ai}jtg!2#L&q-X!{F+3*XrD$K-q(?k*O18PgCxrJDH7rR7+i3fW&JBU2zlcP5A0QFWAV~dh%l{Z< z95+cBdRZtV>a7JCPb0{9K0$Y+e-F9JvVKZdV;%}Fz>SC{mpJlrkT!@Pmb`=V6_)iy zG8_3N-++1`k&f3uhI0q@$#;SDe;;L}r&sRZm3#}zi214};lBZ-ZF>ia8*q=2xDR!R z{s`}qEQeQtbiau*j(bGz!;;gG2c~B!$nf7yLa&KLzPrd8aegjBb^>>m8uZ66}^@H3`lL-G-)CK*wkdVIwvcA6pvcCTTWWIh( zf8^^``SaCc^v?iUF4vGtP=6rx@1hL-I`THePa^#hkl{x`9{(iB{`wUC(O-W=F1DrTo@?*NJP{}{T}h&o>sb-pFK^!#mMD^T{_3e4YJJPUfgh3uRA zoa93MNDO&~7)p{h=h-@zXpEGk(<6$nLuE!`&03Q+Qo0u3 zbjZFZ@aPo3#|3KwV-))|)6KPGDOin>u${%nK2d+LdBnp0tv}3o?uv}3m*Xp@2Y;US z*w3+=$4VK!{{?*U^rVXU)!ax1hkY1Idc=^D0TeAU8NDx_y5oy{$Sg)t%2E1 z5ZM;E@F=lx(EHg-r_@b+bJ!l@vth>eF!K+yJ!JZmjK_@WSQ?DWu;MH5H6$ut3MiMz zYk`g_pAB1bd-!97_XpW>{=Y0=V+&h>9){{S3wE?1ts@=FiP2-jm9g}HWRHlx@`K+* ze-E4U$9{(XWW@r9W9k2S0xOa1!rs#zZ<;zRoyb($W50AXX6TjC^SAIZfdx8#n(=gH zX7nZWNw^h#JL6-$Ai|6V@G;UcJCvPrI=W@TSuYMVW*grM?HG&x@c89Udtggl9*B&j z6@B;7l^7`OD`52dD~w^Rsu3>2%7Q@(fN^aMz-K2YVNn{t8H%(zOLs%ZqLoLT)k&2{ z?a;BJ?{597YXacd2Efh`10&W+>97=jD~O+TbQe1zCbnG@h1EL1?rU44<@f;c|=3wW<>nKIGXk~hu$2@x_!%dwBr~`CgWo}%(1K# z*yqIxW{%%t#)k>maxiK51S|jx%wtR>maIk&IiE;Qbn2ol<6ZaI7hq}o;gJhC@^Y0O z2Rr1EV}eOAEdMar96Y|zDTkGTC=5t2qouZUS3L53+GDR;IIiPoQ(Oz@n%HvuMt?Qq zk0pLp|@G>lPV{VYd>pL7O-X?)RW$28tgz&u2p7cIoc!~f~{{tLFH zo^rsq!7(ku(BjMhyv8)JFvWseu0FIQY+vYYX$cE=V_pjXj2>Puqukg~O~7WoV$w?P zBwwzF_FBQ=YDQLa&U$a!;c%6>v+TULpJ~vNM})(Zz7vay!S3aXYONGEoj(uhU^{h} zX2y1K(QBct~X5S*3nx0^^uuXG)hErv(TpvC7>YHBqeSBFxj55bf;mO7T?dd3FGd|<( z9A49fd%XF^of%JcpJsKNF6}mC+5*LTk1(hmd$?~JfK%zP)27RQT%n;Fd(XGvxs3ZR zSXLz21~DGC#C&=`kU7_$cZIccx8kLPn^M=CO6}o|KL~FjI$D!XAR%h69T_ z6PI(V;~RsXW_C$aPgdQ&Vg@B1@uF)`WhvG$H5l-PBV zzru?DXVwV420IBmULq^UEY>oO5P!9y5t=d$SU0)a?## z?lqBHkt3#T5Rx_ZJ#@S?jXjP}AOBVKQ1T$-=0*i@##gkDe;4y)Qzf&!YiBWTt{6XE zyy7A!d^NA&P^z=M(CKfGG+H9#4NlKN^NzVR!#6-7mi3%{*Qw}2ylSZErH+$P8Z~;~ z+4Mf7%e-47(6P_CUt^*~n{vlmL~*NqZ#stA*YO;hc;AzKZ(8);bo<^w^xic4^5_Lo z>?H;6UeF|N6WJHIZagoT`y;UZ^1ciQcQTw?8mOSeq#19T;VYWhZcIU$*|t6hAGf@O zk>uq_o?8_z?a&0WkYiWDYRI{qzAv5TM{fS$A8*XwdpKuWFCx9T7P#NGUSR8R-?e9K zeXJE5@e#)6hTyUlr7(ZVdrN2VtwF-r!5E7cj}3{jY2oJ*gY-!@X9?D~!ZfCy-*sdh zXV|LH{$^8KU45g^WJPhDso&gCj}<}*+ZIQ0Hoe(GT!z#%Z{kNLY0o1=q7@A=+rekR zEO+Ov<#8jUx7}BX6gsv>$!Vo=kAQ+N3B_#+u!~1Aar>N$X7O81 zH*7cXk88VuT^<+4FAu-j{QBWui=P?%J;yDA+g|+I@cRUQ@i6r*Lxy_mgpX1PZNYQ*9h=A$b(*; z70EU?{O;2}=-iR46OX44{#GjboYx z!GCBDf7aP9`19)j&E7a*bHlK?osUgVBN{HUnaG3Zn~|pw{wS^>lkzB=oE#j|gx@Hh z;qC+ZoGxAtsFM}^yd|9e%QiCw9Mkgou>uZP&frN?8Gb~P-;6Z=T%lveCi?hoWX}14 z#Q$5rh{*oteNI+@V&r)fkCDx{xmd2|=hG|p=;gXPq))HZqsK93uJ9^6dU+l_49>iX zWTAPRtrmZ~IYZT!De}?a0@o4DyAglT_?Zv(0mjRGU56jTLzgt$xF;++P>&lPNgMrh z=`pP)eQ3Yj7#^B=d~?%R1sAX03Fw)zTAHpN`zQ65%Ka4dj%lA@`sn|N=;|HCx`IE4 zo4ZkmzipzDXSJh1aK4If)ZxZsx$oNK9D$x&7W8-bKZE_Ga$b^XFTCKT9?N+MKZeKh z;Wmo!7CXD9d7@IpSy1yux`P-xqh$0k^63b`DwHgw-Vv*=Hq4T zd-G9+xfFtYgOM4X-Z; zYm(eV!Osm3yGfhZ{Y;x2w(!LE$M~KW)9sG`^GuKO#>ZP=iS10A5$_1Y{9~Z^Z2bOR z&?B>Fu%9Njbn|_;8{-b?#%3trBNt$wV~De*TSeF@bVbZyu;jz@y|i>=zqUH=f04BU z`*m?S-NF(O%S@n+Te`8eU|({!i;QhM`=GO>n`57FMZ~ur`}^YZMb-xFql;=whjqQz z<|o~H7_zx9Xf)D|tqPikHt$Hm@^eQE$NPM2a@>$eexL2ba^P5XEn4L+$!v<(;N|Iq zk{R>07|}SN<~?2+$I~Xsoo_PykNf;B zP6=HznX_2KB+OqDhA)mii!qjQY+#(vot^a~X~xs}fSNhHfJ?FGn3tZz2@&Z~hxv8)hC`5ws|KdXa?!u3ex{WAZ-M`NdFStZ9i;vWkZY9J%YB2~cY>*9SQAbEWTj>OlB~eJ0bF>}KZjh2YiAPeri8>q zz5}F9K!n7Ng3ptP@1N+8c&thR{w(^z$#u{W%A(8hrHCHFQV&?-aL-`@~UkTI4$rsGloV zh`cVLd%w6}JSO_r;1@%e`n6)WI3SLYNbi{BUy$fqoU`+|pm-w*_hqf^jdyp1+d9If zjhnH!{+w&-^KM>RfVKC*VC}+3LltEyDM+Zc6hxAckVcG6+zQO!T$poQZv2@X>Y+;- zqN^FAOBk}uxtV8h*}kRS=4&Z<6pZm0y<0CZ#Z$b39P^wSj;`nFs>Plq-|jQLa(?V$ zw(q$-&Z@%7rAv|)CG%Ne%q;!Pj5!NIW1(?AICtKz9e-3DPe~2d+D;Tb-}Q{W<(OSL zUi7`LFC#%{RY+|Y7P?~D0$$1LtRQ{-Bwg{e_fsdZbNq4FI3V#omB@7Y8P6b@`Yos8 z5q`>~`^Aps_HzuybqC|mLu)3O1Qxl!jF23zy-l~{N%^Ow?EBZ~pSfny{v?9Mx2w{k ze7U%J0_uDk!>rl;L-o0)KY1y?sc$=CBEgr9Skca7R=4WopY!O~n$aK@J9{5lcku1% z*~+~s1>_jZdb3zW%)2oKFyHBNpW%Aq7NDa!xG=dqY3SV09|LAuXJ@s78$$5V}837o6&`#gSef6sHs zAe|x(zBk_bj2VtAl56m_nKN1P#sN$Mg;1cLIKxk|vH* z`shE7Umngk4}*xCH1WvHedyU`+#ruS9vVi*cxtJvV3LDTg}S@oEPCWHmzL;1N=t3Mz6iK zqm2c3o*T*%)3*4=^KBY_SKx=Koq0ZBPM1EtVvkK*aV$Sf`R$V}twv+I&=a1!>y49o&)`yo$9b;E;N(&lwP^Ld=xJDfvOP0LLjo|=?X#?Ka)*iw^P4*l6O5?ksS z@3?bkz5~y@C0`LRKDV|Ut<frj$6oT#6q4R>#X| zUW0eGt&mJyI`2}e)+4hXHv8nyLaxH^^Y}5mr+oesKG{5zMWsZf&uch$WBAK`a;s0~ z^Cb5i%lQ6A{v125LH!)`>Hiq=5Pm!-Q~$Tvch9wy(>z7U_%k58=UV!&@cDN_cF(o+ z|El~shFpXC=e;&}V|Y_O`C?BarvJ@8d6iH0Ki}c{b$8?Oycg$glz-%tukFtj@&i7ZOIzKI z`oHkWZ=$0%?$-Ncz7NLTxcjV6p7hC==@dlgYjD21!E;KYTa`~<=aYRm#p<2+jwN3J z-csMvSl5o_dS|;B_=8^L$EQ)ZtZHki+td`lAyee^T5#>3& z&C4J0+P4jLZRL&4>zmvcC;BsE#(ZJU}K8cSOr-Z)1E=I7%vWodie!+cqwqf-=bk4y95S>22e zX{@iR3x^xqH{xk)i(f0h09vb>>KYmw=)LI-e>aM<*7gl^B?HR?5Pn-bUS0P{Tcde( z;Vc1dY;0^;*}AbBi)qh@cVv`t?TtrxM21QEi!%7bP2pZaQV8NYo;XhO*`x-BbSVfjnj8#iIW!ue?z zb+k1g?RTI`&k?RPO}WPN++em@Q;a5Ig63-$OEJQoD|}bKtfelzv2oL;^VMhgceOTS ztc#~=_VnDGNY64pl0S#~t&VzSGumWD^M>Z|Ighv{5rH#;ohyn$=YUn=cD&T_j)n(2 zHu)n-v?ugKQ=IHxW(3m0j-*_8)R%h0p7Ve+TaPjkkLH}YzU_>N&UuL9xU&T(77nE6 zJV0?UQFmiK3v7MPd5D^;Q?|1olqjuyX`2W(a}2^z9Dg#X?8|NeLt-IRs1WX%fBjayDvE+VZrtP203$ z%Tq&)8Z^O_L>e_>g!mY1S|cW!YJ^l$9+cnbGxOccl7P1T_xV4*ey`uY?tAZ@neWWb z&dkot?#|8(ojn^ARv9B(-_dP-#;|Q+4I1$}Q@U+sypJrB+T$M#+G~5l3^ob@^kvh>@UK z>oPXZ=X)^Q(Ni*0%&Ewwp&rbslF=Q??)-GL^`GWX-$jgwylLWQ!^*W2 zVvKtNtKL<~sN#OoqnlIJ?e|GSIWfIWGru4&1D#@Yc5y|-6XAQ6lZVXj3-v(W+4wjb z&1$;bON~5{1f0llRTkBeZ%z4@b&(mje0j!(4e2X$)|+nZ7v?O_z$1*pWbQG6r2f-gA|i|PiWFtCr)j2yoq?)m31cM05YT!J|a18D=nw1|MG&umb0Kl+`c zFvI2*49j~sm>gk#gt;MGPNO;C>0edhs-1b)!Q(i9t9D-?ttT*u*=QY@W(2d+Mn{F> z-GP2rZ5s}YiEmuBQU0?7M@t$VeoV~SQ?lEkXC5maxIDSvTZ<_U)kMBEUz7OW7&yQf zaR{NO$5nd{CJl{*Cp~MZ|2)U;KpFxcgtWR}EHJ2^L z-Y1<;ZD}scrrM(~e9&ALi#^AMp4H8sQWfT|L^_p4@_%y#{(BFfj%r2C9p>#1czr?T zC0JY+3^9}oLkuz?5P2j_c%|~9I_%gJLTSh0>G(LZZ;@5CcV_D$S9_GqxUb#z({BIei|Dowa#&%N^l2Lhg&K-)nEUmW{Mu(*A+w?^VH)3JHp$0OpuomX`#oz7u-nfaUM+FqPxG8Ir_ zbevjMIz_7Ta%~LUb0gx=WQ)VSUwCz3C=QYi9kw|9 zHTq`Hh&c4w;&58;TfZI=hlZgzBnvC@`^`beZVWJQ z+HZW+mm~CtzP&%U=`$OdskqK{q9B4BK&3;E?&{N;|{8;39{pm^X zK2sIwH`~mXkn?opRb$HpM++kH>zDp?t&T)suX)Ja&EvN>zI3jmIaD)l#kEg=gelbb znnxY`G21f_@kyxs?ELy?p9vgAY!8K^&kiQ{HSQhjI20<4*mLKPCNsLIsSsJj3lXSm ze13xCWklfU*MIsh;?-}qIGTf=CLZD?oJCpO2kkgHL^$Le6ZEzYzaMV=M(BGzX*{vIlgd+w%NvJksK8_pHSlZc@9Ki~0U zsB+YUt&!gk462BrsR??z82%w7Xz{=Y#{(^JK%%NVt#52O8#P4v%$IL1EyE`Ws>Q$& z8_kzl;A*bC?#}8wBnzwg{W$uO{f@@5FPeK$Tu~6Z4o<-}+{QE8jbk6#=Xi1KA#*R! ztu!HeuH)y7V~eVz#vN&M9O7Y_kbU|L%N;*GJ7Q6wAMuf#Z_y`MGv@9)7avhciBnUV z+|8s!;d4(rblEPQlsI)J?Bz3;#!fxU2+(%H!a9&xDF6=mUp zSMGT)up7=O4JeL{d(TAXJ5+P**vXc<#8c_e-HVyYm9A3u>Vv9FV(tqjmyY(7ULM*2 zwc=^6+WgTajZRnXhEa_NBOIS#$00ijB@Irs8`OP>_(#xlDmfbEeJ+q(8dN$BW z#=m)i(q;$4FWRc#L2XY}Sk=Fo>EWu~%w9`lPmEu8dsHVz1fN254ufZP42jA zRnN$eD^BgG;7hH2c&N1Y5j1m%UD826dY&rE{&^1UF{=J~=;W$m;9unQ&l`;%Yn6Y| zX|Q7i{qx{M#oxaq!oTQrSTkb&d1GC*X+HmwGvLbT_!ph&s`b?P=S9N4)W75l2&U4% z=q%{-;Qo28yPDWfWp6pSD+X4`BUf$GOdLGk<*Hpc)6v)!;b_5MsB{bzeF0=z?=_fL zQifOW#?$sB&4?}xT|ahD z(pl%v#^3l{{7p!GuU_&CYgE`imEwv5|K{`Ccv|2nV*Rh2->wh;E$4SvUpcE>tUHk$ zYdhCqT1>Eba-eJ*FHP^Hte-|B8S%xO*${LDHdn$HH=F$5<-m!3HQGx5Df+^8~>!X7y zF@fu2f{7CXvnODhclz0>d}{w#h+|J|V5eV)b$u)YTcQHPY^DedGn*o?B`UBbDzGIg zuz3?$ru?%Lr8Lc+Ern_J9PXeNpFKCYS)El&NkdZb8fRdC@Em*t7$HwCRQd#yr(i9M z=R+w;-Y*AtFf4HT7JkwyVrDn)6#Tf7JZeOu@|z3SUa9FC?w$hP7>7EIeI2hzrg( zFRtULrPTX-_zbG-GCyMZ=H#=3T-apRq@Mf_5Vud<-uHqb=51)#;in(H-P?uqjD z2en=qgXcLh!KvNzqrbvpvo1b7-kvhX$kpmrt%ce3mScd3Gn0zF3Nx@C^)qBl;LmXh7EEHF>= z{C4upo@C&`vH?m6}|&{k=cpRPLK=7_u&qo0(9dT}%s<4Ww94K_4ta zOqGDX+SDl`pN6GaNTrg>JLcDX6h|hFtJWFEkaQvrrQo9oHW*_3{7#b#<$MzB-K!(4 zr;L6wmM7kP_?Nw^*QGC}$6;rvvV5c&CExH~afDxO8{SI;jpn|_-ci+~4*$X%jmgJL zyD-T!4nEHBJg>K%`%jEp6*%uHYQOj9s$Z1!jC${nRXe`=-ZLuo)bqy0clC9$GD7v{ ziMG{ufz6qSXD|&_UN(2|HS6Y7WiusEwnEuV3T$4cY~ll(mtx1hrbtlPlr^ZB8m`h@ zUfFRapM2Hz{b#X@FKi=Y5vvexuP~E$FwrSxO~pW8xc#B%87E%5)|LAdy#@w(owmHE z>kuq8fVx4~B3pQ@%_`P&)TLUfF4ZmSQr)U9)otohtx}h2wYpTd^HSaX5KbeYYP?Wd zWpmjE7}ce^IiC)m9U*n~VvcecLuC)rvMiVTp7ual5sj)o(bpvwT2t3AL%~vOvAV7a z?xY^;8(z1k`=iH%uiMQGHmJkV1+ljm7CU+H;4U6#k2)r zig&};s}E*guZ#(X9LX5UH`9g9QpRdHp>RdH2C7m=9|Oq&3Um|z);IV_@eiGdwH z^;VzVbGmY*2p*inIlPQZZy{^BL?=q_Khp}Jn(y^+F^se*U4~3_3z$u)w*rGbjvnSP zlkJ2usB#-6@x*M`MJ}Mqq-wWV?=b&Wy`!odmK9a+tCBF4p(}O2({0r|y$x6B#l9rbpT#obmdGrU-UqY@SZH&yu4=JjoYoe9gXkAH2yg%6p5R!O?QtD&6-KuQH_6&fK?#! z9$aH3gHCT-z*|)jOs=XP9ZbFJm^UMUXPS*K#xx!u6*z=d&Klp12^?|NR(>%NanNrw z0_baR|h>+&7Lk8jL@vQK=F1wstKlT4@TaN2ZSw+AH)RqHugjX zKJlwtHuYjBfXO8W8{ds6ZSZ^EaryZzPRKdk@7e7u-fg)2Q81%Zx7z{deZJy-u!`1J z`)Ktz?)7;e>{I_npt!~5e*y0^-yfb^3}sVHMO?owTZP)gCR~ z7btFZ`IBKCnsrWKu(ZMDkDn9DYPtyC1BEPWp7 zPCwQOy^icvC-kbX_*De(Cd@dYR~f)l`h-{lLbK$A3N8KpzT*ARzg_F^r~cF76S_j# zsuK#$Li5Muc33_oUZ-iFDqi(Gmlm{&>Rk5tiuWLBe$$Mo?6I9oxwcY%cJW*mDnDcW zo@QThGyFtqg=YF`^c6S4iqmN!m_}MXBZbH8=cz%(<=>4KSe42SUvUT2?}i!b9aMiu zCjck%g4H{;dNzEH{1j1w3!mc`RA49`;`3~q&jy|&8-j2F`Vn98Bk<$aR*%q6D?-tBqLoxI2Gsc|PCaC=^H zC+~85cDj?B-JV)^@-vNHF|OL@$L>Kb=1#+7S9e;6JMCF_+B@#F26tMEJFU~5_J|vI z8Ohu6>US(3w+G@MP>%(1YtrQ^dklTR64W*&#nqEtW#urThDDvP@ArfAty((TUpk{7 zm5^#1qPz!HJ!$=27E$<`aRf+{(RIQIkrBp@V*E!fU>j+A6C8X*v*{RX%Ua_}+!E!J1yht&Za*N5=P_Pp|8B_P*ouz5{=# z90DJpUA2l*gU{PAzV{$(=&wclt6`6y_cc}t412x9=Ji>h_u28iw^3Kpr??{=?~YzK z9aOv#j$8}gMnnPEL!ciGBCPfG;PXB+UadnD4rl26n|rI-s#@X5b?7~Sa8UIHigY;o zTJ(8$jqhDUbt^td2T8|0y;H*BNZlC@RX_f_~q^%j_@{YmxaeQJDfjQGQO)89e8Rud9P z>d)--wb-qvfyibnr{T+2jp6?%e^XXuvo7CUlc0>Vncwm+eN7vy#Z{7IbsrGPC z4kX>0dIzvvk*)k4@C`)>io@Ohs=WMIQ|lk+d8S1Erse_iPpCHhO7Xh%=eFC5N@$tQH!6uyUL*;&VZxtO> z{Mp|NG!J_Mm>Ec`3?^5a`|#lVfk3~%^t>IYGhDSr4>**mMogoWsZLCzm8l*kU0Zn@ zLyyoOADMVtL*L(qeFmBI!00&VIM)+N4~&XS8s`i;AHa(N>_uP?;8>KBqfYPsz#v|m z!6&MUU|MTQ^?J)T%~k& zD4p#}r%CBVmhAaLN%L7HyIq0gEdlS=K=HOfT6MFhWs-`Zl|SWC`lQR%m%V;%RB?;) z{yB&k;PAzDuG+I*wP*QV7#xCEVzP@j`1NWR!)6c-tXx!FWhv5Xd(hhyEJppV{nBbn z(7QEQyv4E#dbb6Ow@Pr;!QyQaT(hSSk;F5~o?vnh-nj+6eHi+H-mODNw$#DADc$Gy zJmjh^H+9zR_9s6G(+p+}SG)D|V{O%eK6@LijtF+aJ;pTk~EJE>Dp+I=vcGVU?=qr8@{nB=q|1_=n zpre639ZqD)U=I6=4$l+IA8F2DZ$YciaRqQe%lD8Ma zh`@B->ht`o?qlLSsn5w1!pZy;4U(7o-27Tuotq?zM_Z{xk=(pmTj|{7>2ZPMkQ1FW zDK&rA{mr5D=!S*LQ0AsSQ=OAIO`I=t66ZT~o~m^F?}IN@m=F4j4fh%zr5bm#QJaESL(g*Rw&szI%wPW2E^ zm5VVtp7$q9@Af?9p8SsEc{-j?-|=I4aU6E1z2#0j=uYd$Kspn*n0@ZF58Y{p&>b}Q zy3-E(D-%?G+UzJf?hF+7xynvM4*|MCJd8%&*Bpwh_-CrrlC>>P+;NtTLtAd{<8uJi z3!h%k;UIw*UA5Qawd&Pl)Z5iXr}-D*jVs>7E^)eQ`N|bt7TB)0zGy zc-gun(!U5VVHbVDzXd34b01#3@;1Ea5i}cd&a+)l6g`6GBo519 z2jd@Ud_O|%M_^y=SdGGqfx$R5A>|bfsLR~tqj)|0%PZOd+BRxiUI4ItS!{P}TNW4C z?i1VRv@O#Ywyyxv@N5fuE93S_yXmTp9EZBU!E%oB{*@hRUl%O6l^rjNbJgy66T2m! zxW4z5K=bci7a!sH&GPdYEBGZabaCeXJKqiL=%S%1Q$GPw>Ca+O^5J-ti~zg1R>|;r z50CGCBiuj5h#1F5fe)dGQq}v5u)P#RD62X&;DrmWZCw<7-b3g_zy|#tZ@c58l8?ss zUPiC$QQFaoQw2WYqK#GHy&sP69RrJS|LApgNmW0aR}?}}byDC_T3Z*Dw|{)^&$J#^ zN_RA+ijd*0y8KquHvtyl;>1y~6GfH?Hv48%aB)hpHZtUaI*Ea4pE8D$?6M zzPFuyPrMJ1^XskBW_y|}rPZwI>>a0ISJt}M=hyo+tv@_Hj@Tbz{5c5>W@jh)Wtq#xcF8bB|MJ!bxPM0KF+tTGrH0xt_`*?0qc7Hnmdf#N< z6a8YFzwg6J=iR+@RQ<;QV#Q?qHf>OznU059c6D+5Cae*4Ti#8g;(9c=+TY*U6IIv2 ziRI)O+S~JvBWmbR9}kU4uMalt2Mdd znwp`sZWDw1+A*X;hEqf%z@o=7xX$mqOs#Ag<^9W$YfNBw$rfdvozuG2~N)i@K;Gv?vbGxSgSU_-qyrj6)Ce!EB(V$Job&X$Yv( z>is6X7_<(TlST{Z$W1)FD~>~l*49| zJMl0#jQ!55anpa1@NDAGe|*>B1OL70t(kZK=v&9{jlX|xQq!M$|CsvSO7|~!UwFm) z3pbxR=jd~bA};;us>!cS`u+M_es=ZR;L8^k41Sb(Pxh8^?N!TKZ_TQGFgJfe%Ey0w z^1r@)?z|g+75b0TijGH(^7>cKIMTiJw7SPVW7?*C<@ldZ{P8g zho0a1!M3i;lYe{3-*&XT_w=li#Xm?t?;FlLpSpej*Z!Onosl*%vRG0B#n?bMPJIf4 zTN?FDEf!3K_#pV|%$N=tv1M$!{kwR#X_PecB z1r1Mp{Lt5?Uv;E4{ugh5cw2{guCw{V=VBf{?T4qI$=VhE~)U(d%rIFPv1WC^)B~i zXIwpI(z4yJY+w1n=I)K}w9Hr=dUesSbC(Rfn{~%;Bc9rD(WMi9S+l3-jiRq!yDNBK z{*^mdEg1dLS?SYmeDa>gFaP+@gImtddF}qnAARNC-WSs*zghm%z!#o9I467d55DQz zk^1yFl_3Add2(YAV63DvuRP8(JHKocmuOIPG0qYR<#T5(${Zulhd1h)w=7C~Ym z0Z7>2O0EN{zq6}^^$tj;-F@!8qvzk_RO?}~3mS`3qMjaDbLy@g@=tG{wWj3`469fM zJ=`}9#lbfJ?*dpy;e#cm6LoT(Tv+Erhw*gAj@03~u0TAypwo%{@VVO7&h){(0rP*I z%6%K$x8Z}Sen!+f*PBaD&Tk1bYB4XHhc#ei(?IU|EK30F2eWgT)T5v z<;lfWuEi=en29L7yyq|#lV9SdVM+}yHq7Y+@Z~zyS7&4_&)SfYm0z^HD1Buv<^VqV zoW>_s)+f$sJlyT1a~cmBsb8+L0GQ7#^xPwXMLl8Y}yRwU1AXmA<9t<27yD z7#=rTtN7tq+^DDOXl)F~Z!yevy$a|tKGqf`J9mTBli-Xk(DPVI;zr{Z*|*jj?SdZj z#M)wIrxLWM%fJHEW3Xeo@cU0IU7p0gI<6cz-W*C>I4L*sHQBe0n*=>n;o;3n7k=1i zKW^pKx~<}I`JJhC+@sjHpYIBUmuQ_l++rcz#z2XB)^WE@)nO<{{8`5x1tt4&x8t}> zXC9Z|wOYsJ+_nr4$)>g{gf~U@3A#~ue?eMvIkycvF5S3s-Dzu|=62}WH_L6M=vk*o zy-dph57v2n8+!KhsKI&E!JX%U&)CD~!8*e#qu4bP&?76f4hFNeOWF=&l%nEj!@=;$ zy%7uHaajg=OnZ2#vrn8i)(Q`5Cv0~6k#jlQOFF~1Um-NB*AL}TSptT((Q1ZoyBU$RZU4$# z)Hd&kpH=&6Tds}!Gf`kpUVs|lSuwL5O&oQu@w%9q6Bpo%bAI>EO<(^J#s#)0vfS}H zv-*PPAieoLzO|h*D#loDGgIFyX4ZKVQIm1~Hfy8%PllOmV7B^^44?B}SbavC|1wOU zYnxjAMY>P0T|5k*Yn594MY?mGsMSBDdD}4k>S5;J4Kwewo3Y;tvHFt?&uP0TdHl17 zna>+$=6Z3~M*YiRw)&n7k1q_Yek9F>beDc3%@yLG*WE;|en3 zuU?l^bZyo~%y+65QCw)o!&3C-Y%I!3$zHsC@$ziU`?7HA+RSM~dS*UmhPfTHz@?;f z{<4Mfg)8$msGWk0ymj0$r=@2VT0!OJWvszMn_`^pS*)hKL~zuck+W|7V(tA?`r)6} zogLYMKSl3+q+&u&;hdax=>;1-h|7r8EQj^^^)$67UkGIR{Ds%enZ0oNb@S#e_M|RP zojqrvhtoE3PFp!|c`(CBxG|F)CZN z_8OemNfr~mHbbR`HOZT`eCx10oQAnrv#c49PfVMH+`POsLo@CU^Qczsw5H?bOur}O z)5v_lh02_C%n)qd{f;O{j1#9jJmCyx<`jC?@wQoJCAN;pnWEJ! zY$@qjJqOc3=A^jebl5}lgmGfgk!Po(vWU|{4n>9YTn$g&e`cPm6V4UuE~23rg&Vg9 z@Qkmc{Q^f%#=JnF^I|;H5Jun`jB}En+nxHcFjIdDNPW)nPW@Yj*(CJu0IBZ-sb3CK zznbpQ-$8y8^ID0yjf6k0Z%KcD1?lfhJmcZ|i)VxM-we|I1(5FViTj7*{y1)u=>8-~ z_d_7pg?$AL3)fGLLsyUMz;bSNnv21)X#0X%-Zg=4;`?Onnc;Y8sj!bKp% z{R+B_3@1TY4vv~;7(XWwzh8rl-$l5|;ku7ALF#*GhX1X2D#`U9>&Tf%hx0%a=}umT zxq`@V8paASXN$R!gx-^QZpGt02U72kB+|Ew_Bj4QkjH-%T~)4w`m}Jr@K3@+!sjp0 z{$2v3A+O2 zi~6`ZKvWG!qRbOETl)EP~<$@wx*7z`;i z%gqJn;ZpI$gA*0cg>a<%B{FZ+M42}VeUC)gj~X*_ea$VjAEod0$hT;Qzd^BgIABJn zdjbjfi^QBL=Bve=DdtjPm9R<3&+{2hkC-D67Q>q&TqtDq6rQ9iHa7ON=BbKLa3??w z+h@;HwStL+EnfXk#(nL1xc5TYgpjB*6mjV);*wNkpN{S*CMRtAJrq8FX-;G|7=ftf zM22BBC#oYgC-Oa=aqDxk+T*{XpT_kQZw=nyZ0y3QzNqK)8{+VH)Qd~{qVcH=bZlRh z@G~5I00JMQ=QuIF0YCY}z<}d={YbumuE!Oi-lJ*%`1E>s5Likxcm_h?2dpOz1@9r% zdrgEe3vc6WhsTFwWtd;9`_3yd2?Ra>3i4QiwMbQCB?_(_J}TtynIPSQ6fH%4dA;pPdAdW@h?t%X&!K%5ln6mo*qa#!-=mIfd~u& z2O>-6MLJGc$rH(0wy$W4V_#s2iW)x-V}W6ylJ3DJkqA7Xj`H4*R#i05i(vWqeZ+e& z4qpcp-wE+!@!}KGbADu5!=0x2QSe4*pdUlenJtKH^eF2KF-%-D8s9b#<@C(kBfs}D zBOcEADJM^#lOFFzxPvNG93~=UYcIN zlZ`Qd)qdPz1tbZ<|o$L^pNp7jj>WZ|XS^w9l2Wq8YMdVEi2 z#qVVA%u?wn8=FIJ!{3=LLm~~rp67ZxgkBimiy%ls14UGAO}4OTVHv-Hed>Rf9T;dijxfw+jniL)LZ4^x-k>;jO?uIOnIfHruXcrD(Sw z`A&)@d}#aZ^+fF@it#~YZQIE8MR~U}w2gd6WR*&-^V#c-o_j*t>$kV|@R1p|?ccE; zsVz91?-;yA(;M^m0$gFSVrKc6I4bIdz69S1EfRO89Nz(Dh?&>i1qhATBRBRF&Owb6 z0$KJg^G~q90ul|O`+tHy2>SpuzW`d>Ihd5W+cJPm-J`?IXQ4nez>f7g{qr5LwNZaA z&5#EHy5BI&{U(^VL4Gdow+(auF3eUxf&Tr&-0vS|W>{9gf%=?5&*~@8yqE4M_?2?J zw}<&R)XjNDhH>e_xp92zH>}P7jF$q#dIFaJ6Z!y_n(Uo^1r}4}s1L(axdlQ2&b{?OFE6;)1>tbY5f_ zwc=hc?vqdtJMmQFR*?QOK>91AJuc9PNj%s3rI=p;srL#?bwPK^Hx;{J-bN1$?{`!~o74YfHg<@Jeh&^ek!qPB5+cdhz3KNBy!ct+Cuu14CD99_YJsA6}=VETtoc@nK7h8t-aEn*}lX0#t z1BX?81oBK}KlF$D$YCG1Msa$(5^4kuJir+@bhln~2Bt8-<=dFR9M4HU+E9dPaUz3{ zQ!}LWIdcpinK*eI+*He5eh4$mVCEy-_gik%v$=nY-ytnIa>ZvK@4fp~`o>PaDD&dW zVhv>g@w`%P|Hk`c-hajFP}N!o;rp}X66Zam;c#i;#@nbENkq8vK^#7E;l8^^{jg$>hT)1^l(Y5GKx!3 zZ7KL~mwkfz+{Q!3sy+Qzk83p_yL4xAGd#uvm%Iv(cHAbhK-xCyar*{@`k$p22OS3C zhHzteytlG8x>4o|tv)@U4_L>duC;#^_U-2}1(C4QkF?Gs3;PV0$LE#^!^!&e>)=K` zt545yp4PGGk8a$85Nn_2e7nKs_7mBcszm8A@2t%V`$w>_pGQ0*&%B_ppJts0%Y>E2 z*fqA}xI4Hbn-vYxIwqYs&SD2F>7QXTJd($>hu4XM^9Jm!%?i&lTeRDc?9aMB-}2Qe_!g28QnErmr<_^X3(0Wvi z#KKlNtJfKsdAYgi1qRl+%E($*WTda2qJF*J$jJ$POM$zqgMo~8V+^h1u z1;(nJ^;t$?&IY3}Yd!p^<+hD=80vwraxvVhFl%j&-pj>eVn)_&-t=69U3nZ9vBSE- zSTx*7FEVB$_vYeFug92Y%tsDhZCqnqixr`gaVL8n-t=B?++ZxmDC;z1iE*Q`6xZ6# z#>#^9j5S$B>YP?$S4UNBt@F#s$;rqm$ndT;yj*3pFe9%Z3o*dr#zs1xDraC6E6&AO zja7tljPDq0F#2?@u@2X6zHysTU=-qMyVqE6+>T!DM&k~3%q%%#fi~HWgk?4{24r?- zP8NpYwMM!`P{({#Zq^0^YgDqg`3OmCJJ4^e_(mu0nK5=mInWJ@bw2q{U3Oy&RgSFdu4tZKNPpjtHg3Al5=4n;0 zR`qICuT9k(R?SRby&5^5iRhu|s8Y(3$F)~cM%1FB#!7E)Zk8&YJpKG^13uQG6tB!J zGzze~JUwJ(qG083)Ja~16+yGsrWdR+bPU2rTZc^ui1;PAto~Zf(};bR!*!spDXk_e`veE|;^~#q!@dScev|Hn_$qc8yh7@jV9@ zMm`R>LB}g8D;FKz)n1gOthIT%)Q3$vL9%kOBB?5OIxl8RK@)h4JX9m=GI>E~tyQpU z6IG%ugAPoYhU~RvX3lyn?QZ1e-GMh1S;oe2lHU~GTZOAqrB#NvK&`N-;;bqm6&mBL zOgh9>IXGEEmk(BJy4qn0QMs*Rq10DmI9Is#QwFFOW#@TSO*h+C>^!#p*}7vyK9V$bb8ZmK;c?E2{9Jfw6qOF z%FE3xEZT@T>Na7RvCylMw_vD=&^~9gUedeaW+JSsY*c22tu%+*NJ@Mz4_n6I%w z<7$m-G_KWHsFAF(NaH$<6piaOZqQh)k*blVu|(rWjinklY22)#dIW2kP#E6K1YVU> zgiei7;LXoT&o)xo0%^_kaFJu-4jc4UtyN~LOHTHOt~ar;u4yr~LfC}G)lq5bz?pqv2V5E9{Uqs} zXtlXRKJtd5g8Cq=ullHAlWr}-#+y`)tb@`OVAv@&JFh_E!m1){&&n!nxY-ut*>e5p z4ulTV-hyiz6yC7!g{qmC6VY|KHe4q`t;$*LMHhzcufC+ir>HA-_6D?%aB~_yN>~+% zH?+@6G;Cs)4H=MVVFPk(XrGm6*u=C58<-Yh!;tk*phH(+PFSxnyq6i?%MI^cr>D^@24C?)rVdbG{tqt3${0^IReus@oRs*U-x*>c;d(fO1y8IbBQ;kC1gx;aC zvLJ6w*1DCrYeGwa{$6fTPJZr2Ll+=J6&3^axUo^U@#tq1tTS{58@akW=Us;+#(h>U znq_uQQNXcZ=*`G3%Eldyb!&y5BMzW?ocI7`b%7U(#_Zhu>~v!eDnMf{zA*5h*T&l= zer+&6oi||~xLl31L!$#F)3_Erk91>U`r4J5=|-~GSmZ_bGDr0#@by3{m5dv*an3pT zTER$7_Zn#uChic|B7mhiMhZG4H&YQ|7G$mBjS$i^A3eex^jMJ;();AyhKk=xDrX>0 znX2!ZB_ZbXn+O$4y5}&KuriG`Dvr2GWgORejXa5s@JN=A@(f$TYIE(8Tlp7=6-oJmI)~C7N8l zr}~=8&YQ1obbnJ>sctv!I~WFf*!g+r>vM%@-k|2JPtV1|;1VEm7>}8C04M`Fcff!W zRFH$!;tR5hyeJh=$IZ&s==ZLH*|@>lxjhS28=ghudnDBlM7P~4W~_K$W46=)Uj852egQL z)c)F>Or@p_mJ$mDQ&FFVbt4FG)-DvRUHBR5;aTxi9<7Kf!%$3>aVV;ms{OHs6%V_r zj!ZbZR-m}H(%tyQ;cu#u9&e;iGty0SCjS!nH-mo=xSLQgpG9BuXKbMt550Kk#X~P1dhyVk2EA#}n+CmU(3=LmY0#Sny=l;!2EA#}n-0C{(3=ju z>Cl@Fz3I@K4!!Bnn-0C{(3=6h8PJ;ny&2G(0X=sdccAQ!gJ}kQ%z%#>@G%2E5}=&` z?F1+#z6gQdVCez$xqMJ;0lgVx}-AyLE$&@#l^d{5Z zWWwWtDgI_skLhpDWGKu9li6T0A53P1$(%5m6(;k-WM-JmJ(F2tGCNFWg~_}ynHeT? z!<_;DU^U@cZ?PApE{(D%7cJm;r5hm}-?0`_1oBWHaQakl#X{fShV;gqxMeP1tXN zw2J5yzl9%MbF7*YxeLLP+t0J078 zE68slJ0bOu=OB9_FGJph^g{X}*7o1nKh6H)UL4MW-B%!&KrV+|16cw|hvY%N3%M7v z1@bG%ujkgbs4K-AQbaBsr? z%MfmF2;T!g;=T-E`T{r}a*3Fy3+cxr`zhe9kncd&L+*s!2iXd#hMa1vIfYvz?4O6U zpTzwwu{$grh4-*$LC%LvhD?LZfh>Y7gXBQCtp|OO`@~GUO6>m_Qf;%Ny|w)w_Vth! z$SaUHA-#~p5PmCtCK}iCAr}t~9UWB>nd|Jlw?MVTPk{;=(18^rdG z?K0aYwj*ql5}?Pni|rouuM&UUx7s|b4WymbF0u_`+dU8ZZ1>n^DtDOKE^=f0YqkGu zBiV+h!kv8qw)brR*>?5%KXa9liD%(3=du;dFmfP!e zw*73=+0L@fW!rA`huFVhpNMTQ`$cSz*%q_ywYSCJMm*VPVjFC=$%zPueW;aiV;_ZW zveiDbU$qAI1rYXc*uP>wi+wEiuh`FGAB+7H_OsZ>VqeSZXR(jPzLwR`+JJD_*J3}5 z{Vn#j*w12ri+vFGaoFEtzsu@#ZGxW?2>T|VhwW6?zYp=7hX|%X{%`I7^V<2}?Eilr z^51^_vrotCpLG$hf7S=Q4`kiK>z{Ryz5mSkv#zn~D_-;5c>S}UvHI2Qn_GQ()@R&! z{d40z80(Fb^_f}!aI^Z(+_(3i?cc)D?O)kg*KlJUH+&1=I%OTgdY5(B$u|4^S#)Rr z-`XnRpLGE1UDh|B$Ia^hGj9LW{eSj{*#Bpr$m;*I|I0oT`@rmDu@7e7*#ELN_O;lr zV*g6@KgEH4Hull1e%n9N|7XAP^U(jd&h3AT>?`x$&)x@T-=F<-_V?MZWq+R=`?1!> zzOJ>gAI|$JYh!#c$htSN((HeWZ2uoYUh(_A_CZ19=Yn|E}kM&m*i?Ag@9G1mSa^zku&T-iHi81|c6qoM++r9)$Bf zMMKVmd=+v5WHMw5#0{Aaxe~(XOdfCnWFdsl|E>r5{O=Z!&;N43LdZtQoshdBen)Am>A3Azy>UK`w*Lfh0q${{M~GPlq4&xxbBlKL2C;&pt4p z7p{RFpX>47=639tKq??Vf&2pUTgVfT=OFtaZ$J)04nzJ9;k+;BK_)^jgz>6Rz z(GO!QVi3LK+}1K>iEz4&)=qX&Cq&4Veh}7Uc7?%|cwR zg3N);hg<_mhNM8!AU8vnLoy(%A!{IckV44qkWCODq!i+ZltU^Ym5?ovt&nYyDo8bC zJLGqe-$Qmn>LB%y21pa61=0#>gS10BAf1pdNH?Sh(g*2>3_u1U#~_?U$_a^pL_(q< z(GbqZHUSa~nFN^(nF5J}#6uDwvml9(B*+5DLP!cE6|xkv46*`}3CV`!Lh>O+kd2UH z$lZ{8AooG;hdc;*81h5Nk0C#U{1WmT$ZsK^m+f)Hr4F(SvK!J2X@$HD*$;Ug(gk@N z@-E~9$N=Q;kWV1|W+DRe1;{y&^B@x-6Cq!Nd;<~(nFhHGaup;Aay4WTWHDqZ^adZID+X{{?vy z(hcc_ybn1H8H9Wc!F0#Q>5xds*^qIN@sL;u=i|Es@-0X_g!A%oyAqrWSpZ3f+yJ=| zvJ8?ASp``G$%l9$cR;=eQQJT9{o|*7zxWS-yT}h6@!4~Ft}(PU0!MRPI)72xHw!U- zc#TBtvoRhjXhIG4AGpP9g#S^ss%;|vsfTJ+ZKu-vI$YU>{4BjG&|!FP2segTYNaRk z=|H>FB4=1SeyM*1s9$}xbUpOEf6tXH| zdT^~IlJl05k-{ipv@k}<=knBx6>@$HnkNhS%%0{rVZ1OwI7^r)OcE{-E)?=vKf_5C zE)^~lt`KGlvxT|Bd?DWpFq{p-O+ufrROlC$3oC?`!Y#tB!fnDTVYP6(aEGu)SSPF( zHVB)9Ey7k|o3LHjA?y@(3A=?o!aiZYa6mXHJSIeApwh)Dj1Wc&qlD2yzQpTDV=fLs%oM6V?kGgiXR0VXLrB*e>i4b_%_jF02q%3bzQi3bzUQ9+Up6h1-QYgf+rCVZE?H*d%Nb zwhFnX4#RC1b_hF#UBYf*kFZZTAmlp`h7$!LCkSJOeD_KF$wJPvKr`QYlAMclh7wD75atc!U|!faEoxOaGS77SS{Qx+##$H)(Pu{ z4ZJN@xlb* zEMcOM$7n7RZV+w~`h=xIjx(cvg|Je%MOY=Q7H$_d30s65Z^m%igzdr(VW+T5*e&c4 z_6dCvIvkEQV|adHxv)Z5DcmC5D%>Wl5>^Yh3wH=>gmprWUE}c@giXR0VXLrB*e>i4 zb_%=bqhyM;Z%K4HIbKsYEoCgg({mH)yBVWcoh$aikk zixEx`#tJ71Ckv+tpTDV=fLs%oM6V?kG zgiXR0VXLrB*e>i4b_%=E_}`-KC-LE$kW z2j}uQP9fJ_qB&9+C5#rv2qy?*g_DGng2`&q(7VUloxaG@|o$T6ez zw^X=HxI&mI%ogSf^Mysi4ML8SWOzPdsn9Ph7gh)>gZSc>=ZJb#WyAj^dun?N(iCy-l&TZP+% zRYHzipx$=j4q=Uu;~3~(FKiOF2wR05+d#bzA;&n-+$HQ5_6Rxdf$kjpKn@6x37vSa zPx}aAq%cYtEsPOP5OOR6{Y@555ylG>gtLT+!ct+maGS77SS{QxY!bE$yM*1s9$}x* z7p3D>D)b90gq6ZALXJt`d2AC_39E(Mg*${b!a8BSutC@)Y!S8!+l1}H4q>OTOV};! z5%vi=HbUi}a8P(m=){XGm5;(mVU#dhI7!HL)~FvZOc2fzE)XshrU;h`xwZlQuMlPm zvxT|BBH;$%CZSJQD)b9Eo`d052sy5U<}Jdl!fnDTVYP6(aEGu)SSPF(HVB)9Ey7k| zo3LHjA?y@(3A=?o!aiZYa6mXH)=V5Re?ZL2~>C87bsA4w|Edu|kgJ zpgqTPkW+*l*Fkf5IsSuYjsYQ82ssvnW{w9T zbA=oiLUWODgK(43CoC2Eh2_EuVWn`3aI0{euu51h+%DW9tP$1;>xB)%CSi-PRoEtM z7j_6cg_$Kd84| zxIbH-m=l_#gwetn;RGSaqEK&=aI$cUFiyxZD%495&JrdHlY|_%LcN8;6k)1xsgUDY zsJB9xDa;n;3OUY&dPTww!c9V-uvF+5mJ2I{mBKB;t-@`>Dq*#7yKslFMp!4T7d8l+ zge}5WVVkgB*dgo`b_u(MJ;FX=zi>b}C@jSQTc(R&ST3v(RtmQWxy~o`w+X9+)xzz< z9l{zR*9E1&dSQdGN!TK66}Ac6g&o39VVAI5*dy!{_6rAugTiA%4)9=nICm}?A&eA8 z38RHE!U@7y;UwW?A=f))cyU6mdrEVHaF#Gpm?T^vTqsNtrV5t|mkC!0Glg7FmB+~y z<_n928-$yLK4GcQFDw^U2rGqKgjXQn!U5r+&=;fAr&Q<{mJ2I{mBKB;t-@`>Dq*#7yKslFMp!4T7d8l+ge}5W zVVkgB*dgo`b_u(MJ;FX=zi>b}C_EcmAZ!x02wR11!ggVYuv6G2>=yP2`-J_%0pXyq^n9J)eqp(= zLRcx>BHSw6Cae-x3%3h*2y29O!g^tYuu0e=Y!$W%+l3v%PGOg@Ti7G)6ZQ)SgoDCk zLM{ZM%DXT^7%7YrMhjzv6NItCNy5p(DZ)5myf8sHOPDB35-t!f6s8DMg-eCYge!!Z z!fau#Fke_C+#uW}^a)Faeqp(=LRcx>BHSw6Cae-x3%3h*2y29O!g^toutnG^Y!kK% zJA|FWE@8K@N7yIq7Y+yqh4Z}Y)U0yWk~!h|>JzZ0bX**!rVsy5kH^gR(-IUgWBq5( zSKs+P+z(=lSO1fZ9~zGs7%mnb%bSROnr92=2Ntdta?v{6^}S$k%$_ zSQZzJRkyD&a30>iH#(Z{iNu&6Zq_Lax-#@2sHee;?-{b^m23bFaPM*flD&xgQpxQ2)orkG}@zE}C}se{%dd4z#%)ra-6z|L-k+ zIDy_igKIjIOzt_vS|EJzJqUUrx%B*-} z!fY(-eYrY>tF#6-Tm(Hi;tl7V&dj?aJIiNtU`1!?T^xt@+VijX-d+w@IcVs{<2rC1 z>}z{pfA{vw-uSQAo_}rEyEu&NiOoc98zKzX{l7s%1j?Eiye|fCPm!8PM^|l#soY$~CLZ_cee~7T4PEk_8fsZq!t%VhtJv6fp_mCxSL03t|(DK-4N2A_Rzr z5W_A+CH%Mvy1p((3)ZXD($?PE*0$85qE#D|5Jny)9*s88WM>{2jC%D@NL)AYu0r zdp%7B54n57?p?t@wC>#fX?W7E)W8dUT6Y%gd=sX6VENnOR%oy^6~91UaI1TTd-vbF zp0PthhwE8}@M@l$3a{pAsn)mb;*9oGB+T4xuP06T_H?wXeUYUX!yZMM(GtRgc6RlV zOdH94-(9y(9wgJzY@1r`ytzD_IUc+tS(gXHgY=?n} ziv~l_Z{I$U4f9aAFcl>^Il^8+(N8*npk@67+g$~}TmIMJC!zGe(LT1m(`V~{xP$)A zcKjCI?O90Oo{on>c%aJNW9{2B`CQr=o_)Y}XV@9RqU_XA@c{rgoLKjC{5*Zm^=0@m zJYjD_uE<<85GBiw-0l`{C$s9>pdNA&)^(3E+|aW_7%BW!VE<73emoj`W3%VZ4ul3@ z*m~s5PwLYf_XJB@J?okqnmvtM5pE+0-itZf{?^7rp0)HW_UcU#Rb>+Nw%eucA$K91 zThQA98xG}950>r?`getV=b}Izw!htW4+whq+mi;kgWdxGsX^~S)Iex?PItkl^*OeG zmtDFymiI4 z@OHX_`S;qT2ZA$G-FE3g0Q9e|1>R2o>cF<4)Y&Jku@d^aY=8Q&KLq_OXyhblQ05r= z4Y^5w9@sye22!6&uhzX_y&d5}*-)3@Y2U#f6m6-o+4i=F8$O|h5nw*u`qrClyO|&P zhJ{zj=C|xrSm>%~+xaRIcJ-rvA;6%Ix=uv?UFiaERr=fRLWf z|C61hQ8c@W6&lK%Zo8YtdDDI8jq_&s&WZlWqPqq5hmS~sjx@LVI+&sC?}75Vg@q8& zKb8s%jgpy^n)(Yo!%XJ+j+b4rHcJk?Ec`-a!c0Ve9oRoGIQy_6ZqR=ezZt2=F!;^L z{(&{*?XqVdw*5zg`yq=l9yw-u|4B&L_JK+&^@rb%Oyz(g`WupJ#Dv`T*dn)3X5rR9 z_X&*8bNNmSPs(${(Fa9DObYnxeUnaccXi?+*8V=5Jm_L%QDX8?&k5zZUsRuaIvdTT zHSVCm4Kakrh}!pmI)By_^CvX4zsLSO`N!J_Mpj0}7Tm>x)Ey@+MA%dBM%bHuB+yj8 zl5}EsN@=>REa|vl`lw4gJujG^V;AMQgGD)RduCp0aAr=bp+~eg_y>4T*kjmhN)D$j ztujHbXG?ntdk+NORVE^HZE@$xya$1>4|drW&to)d<7J#(V*1ZVb(%So3fVf*@= z{Dn~@g%2WwIT@1__0e#KwF@cjDp z;1-e5wn4%J9>eb_BD1{;`Num3_x0(vKf}J0eRfF9HiD%c^uHnZ(op7VyHDV7AK%Ep z;S^tW;IPX#)%JEMCrVc*w1DD)*uG1!P)Yo+V%!j(=th6x4vtrIG^jxkb^QQt#GdE| z37JIWG2an#bOjKP$iS`c^E`Jffx`x|-5?yStF^l$ux-51fKG_czmZ41sb?|x2xTs{ zCpEc)%fXyKnH#GP$~tLjij>3lt#(H;!QN!_HB2RtKxu@ur1}7(K>H3^&o`_*9xgL5 z{@X53!WOCLGBPqH zk6?veU~w37&4ts` z*_o6V7?f=tk&9@+QQJ8kwqs|0J8%T1@JFaF@Scm$Yo;f*qyiyqgf}s18NxYf%ZQe{ z1cN(WP_4Vji$*0x1FJw8lO<-yXBZ-bQ+T$lvE1gc_oY8Y!mXZfHAh}G7*d@^`&asZ z=^rsU427#9Yis0$B)Rk6ke1)b9eHzth1|d0965xdCzAYy#A$`(Dm7$3(KKn#+CQPS z=?tT~DM=zdiYjLntuS5X@}h?L`jNy6o#hluHOk`F$a#i=!Ab`jvcwl&72Rp6(Q5xD z^6pUzPQ;V@kaLYBA~PkHzcq5DQIe=N_wh7*{P$Qck>QDmV9CETh`_h4{vFR#-gh=* zRmI!cwy1L-8gbjAccd4H>h9l=2%@Iy;ULElx;(K)y(FHsHcc3Zn2czjb05eO*++N0 zdgFZ&<~i$MKx1CtJop9AlY0`>@81q5X8ThJt7SD63CEvmND@^f9lw#J?XAe!FgGpm zT+dp*Ctov+n&flHT?YatXmX_v3hio(Ukdyk>r9iO+t)fG>*J}C>9EPD-5XY#o{Bez zwWs=-Q=`&`=&9DxtwtUJ8%*Q+%XP-qXld3`G3bCN_d!8YMem%cdW?AxQ1_6He?wz! zirn@If>b}-xDQs1dC5)9>4EWMU7p65ft!j^{VrwrZgXTOVx!zLi7d4u=bQZAhA1Y# z*MTSChpr;>O{QCFc^XRa@Y=gwW0Mr21<|cPpo5MU_|ro%uAl6R>u#crc%4bp8tDRR z3ie%aO&}Nt7|jmS!-+}H_qKL5m@K_U-$|oVx=UeMjlqy`dbzuX?TTFO$mq4i%A)eW zBMjgNs7*7+EEq(BLNLLG=Exv41e1D1a_WZ#`$-P=>k=pM`~oGq1GZ!`|7&6=e>O;K z{w7Ix!Nx8^d;LDD5(a0x$6^wK!LR3ze({OZ$7`%&3;CrYGW-EF53gY=> zCT)&_4+bX>zL2&nl9ISwRGS#TM8+kqaS~v7vQ64}R{(;{Z;IriZku4p@$)gc0ui?= zVXxtuAeK*74hu9F1_eepolXyhPTyX`k-nbb1O?V}+9%hagvXc5PF#xer(z)v^M}n~ zAfj4UaZEiAob73Dth!-U_}tuPj{C6Q7IwE_l}U_Im7l;06ADu>*}byEF7BXENXaQY z7Z+vkGC4K)0z6f)w6pGVEG}*BaNEV5q0Rk{!V`wZ?`*;ZMvERkHQWztrpIGNYI3Sr z${m2!;I{CYavd!2VQS!mjKHE!*DX6CO;E`YU4haQu;_Z^=i86r{5#=%Rqkbp-7CE~ zp`oE>F@OKBrN?~GSwE~C>Qsb7`C3&i-VSOS=41DRFx@4Yfy3Rw7GII)`CU*oJ5Ki4 zw`UlZ0ZpT8ZQzn}p!;}OWT1P1XB`YXaKObejkhC?mwz)BVqv4*U3sj3oiirTg_y_{3Ab9D3K=%k=-$3^T{@aBxO;8yr z4<{Gj$XDuEiT^W0402ryu2^38e-)W-4{k@S)|EDs;2V)H_MuXu=z5v6zKgIf9IWq@ zD^qgvA7X7;=n{gZyMo1gS>I|&qrNkywBUA6!>=(4uuI&YC;Nmh+qLTNX`VZ{U>ur= zs-5m?*yI07m*hg5lCs>p* zNN2BMpw8^lS3>DiTikp}3>GTybO-vmB2RL>dSuu~!TOHK z&5$&<8myH@6Fiafm3ClOa%TjI;gC=#p-fpJt3-uN%5V=ulwuz$TA6}6QyJG|X^yXE zv4YF*WZPn!S}jEKpaw;S1&jI&iWEVOF#*gyk=*9Mwj!~%28i7eu}v2M#~vFSxy@aB zk+YUwLs{$QOa+E4)N<2_=`^GBgz$Z+8?k^MaJjndWWq$M<5Xozsx#Cuw>dHa#Ase0 zq0&4JQ)nua^A6sL(N;C|p z1^3`~9il7m82xK<`R@?&H~(wp??rC8U-H@YeUFfL$Nyz{<$hIM`{e#@_+vPo%S-E<43(1 zEm|ly>~QL?znTaLGiP6p))j4D_P1$FLD4DTEKou2Asm&!I8$|==^^(fEE=j)B<@YB zVW(om%l)E0GI_yAD}RSgV)Ev6MUT5=B!{e`wTIGQXRLj{X!;mRp-!V~d^)Wyq;xgw z`quJ^6D@0%o7nniHxi~sr9)c1d{z61Nm2GL7<&BGpI2#}5;08Pi+DH@*~KR$hj7)^G{)0r(F|1hqnmHqh_ z%@6Irr+iX4DVb=6Pv6P$KBnV-(Hi>%-}v~4QG>lb6aFx2uo&H}q06+_G8hS9t@i!m zu%M&4KrK-om$}8*?X`|5pVHLe?R2zpI^f(i>WH;x?J?fyq3{3y%flUy1oguOHhBmx zs#hFi^{3nS3jZaB@}czU_Wc~wZ+)wea4UvKlY`N?6`bv2m0k5@tc^`{zVWrx0#URB z)$TktK<#=Gs^iITBB*r9qv~)1kI_x8bi9s^8T$ zC+yve@`h&}FwPfrKpUw%pb^!tcUP#S8*{^Dbv)fLmx*wga@I%bf$e>?E|6!yyUk^L zw-roqd)7XL94J)jHo?uE?K1a`G{2!-Fm7CiDak(X-bgLyF|s=cD)vRX?pLEn(PTN7 zG&Q30j=Uw-aWGz!nnM#z&4K_<`pDCo&Ms}%8s{NsZ!;>XWwk!#-ZFt5B9j~QAx)1O z@-%iL8VO|*Dm7UJ;6UC1M6&`m0Xi#Skt(mMhYbhZT(Hoi1uViQs|wE@E5MG`;ZxPI z;Uk_MOj0AMD@Gl=HZByk!HG9(qYALe(35axkp?VUU>pL1uDcSOX=HwM;+(V|a=}HO zALM-QGWhGb@tU4b;xLb1N)YwmB398+ZmUJCx63CEKKK!9!B~qz8dkjEh(Yc-wz$23 zr}F||PxW1#Sn9aOKEEk3QCFM2k_JfY5bT3kE{eL1z33$9Hu|Ify3rVUu11NE3AcBz zuQtY&>rBzJPyTNjsPP!`cIs2Nu*7(NzLQiw87*t50AYhN=ZwgOY)JAHV8V7|*YCwS z--c9>8QB?+k@r!D!4@M#mqgoUu%&Ci9Dn`m>u)XFW#f)7>ksuM2Qa03;ZVMy`g4w- zi@2B*-|XW0EHphFgW)GhgBuiB;dUiIPb^o?^s*Apl1meXLsmzgu&S&3Ir`cL`cGTi zz}EsRQeD1*v6f`^2VK{-eGq<_jS!ccq*snjSW25?iI|l$8!jsf=I6)gOy)-StC#=g zH{q_-!#u-nqj%SipqGqnOKp;_IUl(t&Ier{=6TNxn@1!4h^0qIdR6MUl5|gF3Tz-3 zw?jh3yMkAx28*|?%!!=B<}Uk9_65b;!W%vnvq!aSz^foDQax+M@jTrpvv;Q&q(SK( z-gC#VS+R#*{wL_-e`VzS4&8d`uH5cm={88yxM$^vNMGbE&o6KsA@b#k9;FGL@1Ky8 zjEXrH5cy)%9G~y9Ma=VQ=J}M^*93VwrvBSeKBvbBwMDnBElXG~`)w<8y(e<6!s7^aO2oPIe__Dopi)Q&{d*N=$m+j^A zwwEe-zM=OnhI4CvbQgnGu0k-}QBUAtj`MP&K+Z&Z%W+T`OZz8kL`U_ z%M_Uemni(Q8$E*m_x1{RWA}<`<(jv2WlR6LH`pL{U2N|bol^K?_liq}FW%zx#ew== zE?-NM?2EVPE?I2MVP5d4cBoJ`x`V*qUBUZ#0dmDKq06px(J$ER*6_8?xE(15;lXul z)FsJ+mzMvk&WBa_1@pxmK(7rxU23@ti z+a7uIui@DbXm*e{#w=0qe?1q2R=9JU8@q!at;lKnK#rg7yTzCu+wQWxFdLA#X0DXpk$)_w&14&_<1>VP2oP+jJ zx@qfwU=MM#;+z@qZb|h#dDt#~?6~^P1;tyIhi&g;!(hvYA=Q@G-aXs>bUcblaa6HMbW(5FWIZr4o__y^nhCsbhO7-K02kz66=YfZ+&^xv6?C-ekLA;y8cO z^`jVZrd_;gYX`0`Zq~6W-pyTWjzPe}$V5_2nN0KqtP2eNATAQmTu{~k?mNl3v9u7jyu*dW0sAVgV@+PEo}L#RhlX;3zUhWAd}Me zbn6XxA8`d*`qKCeFRw~T&Ve~SQ_9)GnWP`B}DypZHP6ixHh_z z=XR%2zEEbGDDfrCi{nPm+BtD0=2dl3;)Q5097l@s8bdt0^z)UMN%hdzyIGcZbHQYc zfd2yr49xOw{=&-pN1j4VxL@rYFaGQLKRrkKU)KL!<;Ditm;GP#K=qgX-+y2KC;Cmg zG_H4l+5e&YL|^xr`#+9c|9AC&(=ZJCU)KL|eHdrMa0p`dLF^N&4KTaESO8Lo-VbAt z=)(9XaJauOKXBOXX}AuU99rZaa!%ZW2jW)i#e8Rq8!POwu?SYKLpYV_!?Jm7Lg8r) zqm^>VgqfpvmtKM5F;u=526uQp4W|n!QalZOg%2e0doirx83jQt=1kbHRfj~?B9=Pq z&9jN+9BUHKJ=9%-_e4ZW5P)$KilDZVdKM=#oHTO%&Yt2{M>)o$JV-xGrl$}XwI&xL zvJ`~L_AP`wB5kCZt6x}OT;_fn^D-;M@+(jwbI*K@$swZH2<)+gSfAoef1+Vw(l^!`Ai@e~RuM3RS` zTGq&8(A*~CCNMv-4WrnSg5Ef4S;GnzRB_WW5fYrlk8s*jX zBkz{z$(ya`b+Ksfi^oUD&hZ4r?ooWKPKhH9NEsB`VIQ{xnc@fp!f^RS+rw(=jT5e2 z%Rka<5SY(-w}jH4V^pxXIYp!qZ3oSO?XQ>vZ)rpd+NGPJ-#)(KI3;?yJUxm9cRMo` z*V|pbp^0^4tZj%ZOvpFYo|rmrLaP6FdR`Y@xZvuCSP}8ub3N+IMh&Qa));dxKyb%3 z>NEN!U4%Fl_A7ObrHIgF-QzA#_wSWwsIWGV=~8%dx|q@hi?@VNTbbQ8OV8(k4?3(T zD5|<3+u;@Yp(&WCZlT#xNtoVgLG-@CvU0A{$g4;GUvahkmoiI~COkP4uPXaYWf~nT zv1w|NOF1t~xRMpQm&FzK0MT4~xbpOjKGwUUURQkAdCD#@k3%7i`iYj))r^uBfr*VZ zCFgd4+8$YUqAVsGsDCqy`FIksj&M>LYi?K&KoYEU6gRI}Xg|+p{R}s2@phH9Yz1u} z1pQlr_0M*ldh1!@Jz4%|!`_^~d_HQUi z*nMhy_9bmQ?D}Wld=HCDgIc<_W8ufYMYzJI{^p!PCf`Y-EC z|MjK+f_sj&_XIxqi}GK>pJDOfOaG-7L_drFlJ_q@!+FI2S?BjSR*^4l^`_3Y3*9fq zmD%v5jC2_+Xrt-VLo@MmGO)qR865;TAILY&A$_1ZD*+1`kBAf|7pwYl zIf!`3w~EID5L3E^W6$8*vlW$oA6pdX`%E=rly4Q+z?mNM;4PsnazhjQ&bZu^K9syu zDX%*tj=~`?H#-u<%kox!hV+BJ7ex9vW<_N;%$Ds-FEr5y2%RywbkWS7iHa0J}+zW4L4TI^(A4NHFxp63d&GgT~Sv9x{7&O71c;I zKasFmOMJBz<%>u^Ww9@7Nag$?S&M5bYRi3#YqOSB`W9ySmMzY@p=$Bmo0cTW&`4WR zwWPwCesOihvD16Cq?Pk8tej6aF)5O1xwQJG>cz{dV}wJ_Su&&-8TEU{m&kH0T3lO^ ztl2z_QczLZaiAj(j=uvOgzDkrmT4Z4kF}1N`h2B7~%RgjE)}=X8@+`=?tadS^ ztg5J9;9J;>E_IT4KDnQtk4h5bleMrsrY%@>Wi@KDa$XkS!!C4|6DwXKz0N3KR8xfp zq;>FlY^Nvx_&U)#OD5xz%3GsGkla>Gs$-XXVx@0MNky$J7IcuDZ$&lzh&ICHbn_}q zx@ehvbd-ih=}m+&FoM3Rl8Rjf6En1%B~lGNXWlS~MjMpgODjKXUZwbKN{|23d@P!HJ zHGjj@hD=}1=i(&z)v7PtZz$-b@6voL`Zt>sf(-` z2)$KO0Iv{uZDQOrY4Z17R){}&@(ca}Qv^Mzf_{`dC_V4gxmFQU_!Q&3Q?C;5US)G0QZgN|zQwl8WHz|ELyRA1U)BcpckGrjI zKCW~3ea3D5)U7yDwZ5PB|3R9yDJ^MGGBw00@HVS*KK^qIWYt@f#4sb;znU&pjzFyG z94uIu=2(~JTGOl<=rpW&FE5+6HAy&XYwA39>%Lo}EN9XoN8O<%y_Hpd!xF1}-aMbyih{RaI?OEnZ+%`K(2Y=UI#VRaSKc{x7hq7yB%v zsaafO)h@28!XG$M3xghO$<4Js3$EDm)%q*=r+RL=ufnPWwU}QdY45S^5OLqnIJudxnpA!P~C=ECN8?`PwtrL z2q{Vu7hhnE_M;RI9;4JqI9dE??N?$1W*%c>!G>(Bz784rEflg&x%ASDvWAx4;IH=i zFD$C8F0Wmjl|KUiF38RIi_lTSM8GJ^PS1YP9+ds!K#>ruXSbG2w_M9p`|%uzb$Ytn zeW#0YSw!(Uj(;YckUFuk5BmU%apM_=PolVMWR!Ihp(7oC1BsuL`Nt90#4vom!at6< z#~6lBCjU6%USb$N_$l)qakP1UumU6ErWj=q=O~lJ(dPNV>w87INk+P{DlSoeGgVxo zve&4%L}j?Um$*lJiQCpoT!)HFBq!gM$4?@?4CFEuK8e!htGMGy;HZa^UgD~H;mNz~ z{3Md)kzUd@_Y&8x;u7ila4+dHF%0D=QQ32Pi7QfZiOR6Bmvjxi#BEe@U!y=p@$K(f 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±ORUYF~(*MMIk@OVog9tsF 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
      0*bgl7{-59O93?kAGJ?pKw6PwwfIpY9)( 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

is NULL, calls malloc instead of realloc(). - */ -extern void *grealloc(void *p, int size) GMEM_EXCEP; - -/* - * 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. - */ -extern void *gmallocn(int nObjs, int objSize) GMEM_EXCEP; -extern void *greallocn(void *p, int nObjs, int objSize) GMEM_EXCEP; - -/* - * 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); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/src/goo/gmempp.cc b/thirdparty/xpdf/3.02/src/goo/gmempp.cc deleted file mode 100644 index b1ee970d..00000000 --- a/thirdparty/xpdf/3.02/src/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 -#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/thirdparty/xpdf/3.02/src/goo/gtypes.h b/thirdparty/xpdf/3.02/src/goo/gtypes.h deleted file mode 100644 index 9f64f57d..00000000 --- a/thirdparty/xpdf/3.02/src/goo/gtypes.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * gtypes.h - * - * Some useful simple types. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#ifndef GTYPES_H -#define GTYPES_H - -/* - * These have stupid names to avoid conflicts with some (but not all) - * C++ compilers which define them. - */ -typedef int GBool; -#define gTrue 1 -#define gFalse 0 - -/* - * These have stupid names to avoid conflicts with , - * 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/thirdparty/xpdf/3.02/src/goo/parseargs.c b/thirdparty/xpdf/3.02/src/goo/parseargs.c deleted file mode 100644 index f77cc85c..00000000 --- a/thirdparty/xpdf/3.02/src/goo/parseargs.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * parseargs.h - * - * Command line argument parser. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#include -#include -#include -#include -#include -#include "parseargs.h" - -static ArgDesc *findArg(ArgDesc *args, char *arg); -static GBool grabArg(ArgDesc *arg, int i, int *argc, char *argv[]); - -GBool parseArgs(ArgDesc *args, int *argc, char *argv[]) { - ArgDesc *arg; - int i, j; - GBool ok; - - ok = gTrue; - i = 1; - while (i < *argc) { - if (!strcmp(argv[i], "--")) { - --*argc; - for (j = i; j < *argc; ++j) - argv[j] = argv[j+1]; - break; - } else if ((arg = findArg(args, argv[i]))) { - if (!grabArg(arg, i, argc, argv)) - ok = gFalse; - } else { - ++i; - } - } - return ok; -} - -void printUsage(char *program, char *otherArgs, ArgDesc *args) { - ArgDesc *arg; - char *typ; - int w, w1; - - w = 0; - for (arg = args; arg->arg; ++arg) { - if ((w1 = strlen(arg->arg)) > w) - w = w1; - } - - fprintf(stderr, "Usage: %s [options]", program); - if (otherArgs) - fprintf(stderr, " %s", otherArgs); - fprintf(stderr, "\n"); - - for (arg = args; arg->arg; ++arg) { - fprintf(stderr, " %s", arg->arg); - w1 = 9 + w - strlen(arg->arg); - switch (arg->kind) { - case argInt: - case argIntDummy: - typ = " "; - break; - case argFP: - case argFPDummy: - typ = " "; - break; - case argString: - case argStringDummy: - typ = " "; - break; - case argFlag: - case argFlagDummy: - default: - typ = ""; - break; - } - fprintf(stderr, "%-*s", w1, typ); - if (arg->usage) - fprintf(stderr, ": %s", arg->usage); - fprintf(stderr, "\n"); - } -} - -static ArgDesc *findArg(ArgDesc *args, char *arg) { - ArgDesc *p; - - for (p = args; p->arg; ++p) { - if (p->kind < argFlagDummy && !strcmp(p->arg, arg)) - return p; - } - return NULL; -} - -static GBool grabArg(ArgDesc *arg, int i, int *argc, char *argv[]) { - int n; - int j; - GBool ok; - - ok = gTrue; - n = 0; - switch (arg->kind) { - case argFlag: - *(GBool *)arg->val = gTrue; - n = 1; - break; - case argInt: - if (i + 1 < *argc && isInt(argv[i+1])) { - *(int *)arg->val = atoi(argv[i+1]); - n = 2; - } else { - ok = gFalse; - n = 1; - } - break; - case argFP: - if (i + 1 < *argc && isFP(argv[i+1])) { - *(double *)arg->val = atof(argv[i+1]); - n = 2; - } else { - ok = gFalse; - n = 1; - } - break; - case argString: - if (i + 1 < *argc) { - strncpy((char *)arg->val, argv[i+1], arg->size - 1); - ((char *)arg->val)[arg->size - 1] = '\0'; - n = 2; - } else { - ok = gFalse; - n = 1; - } - break; - default: - fprintf(stderr, "Internal error in arg table\n"); - n = 1; - break; - } - if (n > 0) { - *argc -= n; - for (j = i; j < *argc; ++j) - argv[j] = argv[j+n]; - } - return ok; -} - -GBool isInt(char *s) { - if (*s == '-' || *s == '+') - ++s; - while (isdigit(*s & 0xff)) - ++s; - if (*s) - return gFalse; - return gTrue; -} - -GBool isFP(char *s) { - int n; - - if (*s == '-' || *s == '+') - ++s; - n = 0; - while (isdigit(*s & 0xff)) { - ++s; - ++n; - } - if (*s == '.') - ++s; - while (isdigit(*s & 0xff)) { - ++s; - ++n; - } - if (n > 0 && (*s == 'e' || *s == 'E')) { - ++s; - if (*s == '-' || *s == '+') - ++s; - n = 0; - if (!isdigit(*s & 0xff)) - return gFalse; - do { - ++s; - } while (isdigit(*s & 0xff)); - } - if (*s) - return gFalse; - return gTrue; -} diff --git a/thirdparty/xpdf/3.02/src/goo/parseargs.h b/thirdparty/xpdf/3.02/src/goo/parseargs.h deleted file mode 100644 index 0d163b98..00000000 --- a/thirdparty/xpdf/3.02/src/goo/parseargs.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * parseargs.h - * - * Command line argument parser. - * - * Copyright 1996-2003 Glyph & Cog, LLC - */ - -#ifndef PARSEARGS_H -#define PARSEARGS_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "gtypes.h" - -/* - * Argument kinds. - */ -typedef enum { - argFlag, /* flag (present / not-present) */ - /* [val: GBool *] */ - argInt, /* integer arg */ - /* [val: int *] */ - argFP, /* floating point arg */ - /* [val: double *] */ - argString, /* string arg */ - /* [val: char *] */ - /* dummy entries -- these show up in the usage listing only; */ - /* useful for X args, for example */ - argFlagDummy, - argIntDummy, - argFPDummy, - argStringDummy -} ArgKind; - -/* - * Argument descriptor. - */ -typedef struct { - char *arg; /* the command line switch */ - ArgKind kind; /* kind of arg */ - void *val; /* place to store value */ - int size; /* for argString: size of string */ - char *usage; /* usage string */ -} ArgDesc; - -/* - * Parse command line. Removes all args which are found in the arg - * descriptor list . Stops parsing if "--" is found (and removes - * it). Returns gFalse if there was an error. - */ -extern GBool parseArgs(ArgDesc *args, int *argc, char *argv[]); - -/* - * Print usage message, based on arg descriptor list. - */ -extern void printUsage(char *program, char *otherArgs, ArgDesc *args); - -/* - * Check if a string is a valid integer or floating point number. - */ -extern GBool isInt(char *s); -extern GBool isFP(char *s); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/thirdparty/xpdf/3.02/src/goo/vms_directory.c b/thirdparty/xpdf/3.02/src/goo/vms_directory.c deleted file mode 100644 index 92d94932..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_directory.c +++ /dev/null @@ -1,214 +0,0 @@ -/* - * DIRECTORY.C - VMS emulation routines for UNIX Directory - * callable routines - * - * Author: Patrick L. Mahan - * Location: TGV, Inc - * Date: 19-November-1991 - * - * Purpose: Provides emulation of the BSD directory routines - * which are used by some of the X11 R4 release - * software. - * - * Side effects: This is only a partial emulation. Not all of - * the required information is passed to the user. - * - * Modification History - * - * Date | Who | Version | History - * ------------+-----------+---------------+---------------------------- - * 19-Nov-1991 | PLM | 1.0 | First Write - * 20-Apr-1992 | PLM | 1.1 | Added validation check for - * | | | for the directory - */ - -#include -#include -#include -#include -#include -#include -#include "vms_dirent.h" - -#define NOWILD 0x00000001 -#define MULTIPLE 0x00000002 - -static unsigned long context = 0; - -static struct dsc$descriptor_s *create_descriptor ( name ) -char *name; -{ - struct dsc$descriptor_s *retdescrip; - - retdescrip = (struct dsc$descriptor_s *)calloc(1, sizeof(struct dsc$descriptor_s)); - - if (retdescrip == NULL) return ((struct dsc$descriptor_s *)NULL); - - retdescrip->dsc$b_dtype = DSC$K_DTYPE_T; - retdescrip->dsc$b_class = DSC$K_CLASS_S; - retdescrip->dsc$w_length = strlen(name); - retdescrip->dsc$a_pointer = name; - - return (retdescrip); -} - -static int Check_Directory( dirname ) -char *dirname; -{ - static char *tmpdir, *cp; - FILE *tfp; - int status; - - status = 1; - - tmpdir = calloc(strlen(dirname)+15,sizeof(char)); - - strcpy(tmpdir, dirname); - - cp = strrchr(tmpdir, '.'); - - if (cp != NULL) { - *cp = ']'; - cp = strrchr(tmpdir, ']'); - *cp = '.'; - strcat(tmpdir, "dir"); - } - else { - char *tmp1; - tmp1 = calloc(strlen(dirname)+1,sizeof(char)); - cp = strchr(tmpdir, '['); - cp++; - strcpy(tmp1, cp); - cp = strrchr(tmp1, ']'); - *cp = '\0'; - cp = strchr(tmpdir, '['); - cp++; - *cp = '\0'; - strcat(tmpdir, "000000]"); - strcat(tmpdir, tmp1); - strcat(tmpdir, ".dir"); - } - - tfp = fopen(tmpdir, "r"); - - if (tfp == NULL) status = 0; - - fclose(tfp); - - return (status); -} - -DIR *opendir( dirname ) -char *dirname; -{ - DIR *retdir; - struct dsc$descriptor_s filedescriptor; - char *filepathname; - - retdir = (DIR *) calloc(1, sizeof(DIR)); - - if (retdir == NULL) return ((DIR *)NULL); - - if (!Check_Directory(dirname)) return ((DIR *)NULL); - - filepathname = (char *)calloc(256, sizeof(char)); - - strcpy(filepathname, dirname); - strcat(filepathname, "*.*.*"); - - retdir->dd_fd = (unsigned long) create_descriptor(filepathname); - retdir->dd_loc = 0; - retdir->dd_size = strlen(filepathname); - retdir->dd_bsize = 0; - retdir->dd_off = 0; - retdir->dd_buf = filepathname; - - return (retdir); -} - -struct dirent *readdir( dirp ) -DIR *dirp; -{ - static struct dirent *retdirent; - struct dsc$descriptor_s retfilenamedesc; - struct dsc$descriptor_s searchpathdesc = *((struct dsc$descriptor_s *)dirp->dd_fd); - char retfilename[256]; - char *sp; - unsigned long istatus; - unsigned long rms_status; - unsigned long flags; - - retdirent = (struct dirent *)NULL; - - flags = MULTIPLE; - - retfilenamedesc.dsc$b_dtype = DSC$K_DTYPE_T; - retfilenamedesc.dsc$b_class = DSC$K_CLASS_S; - retfilenamedesc.dsc$w_length = 255; - retfilenamedesc.dsc$a_pointer= retfilename; - - istatus = lib$find_file (&searchpathdesc, - &retfilenamedesc, - &dirp->dd_loc, - 0, 0, - &rms_status, - &flags); - - if (!(istatus & 1) && (istatus != RMS$_NMF) && (istatus != RMS$_FNF)) - { - lib$signal (istatus); - return (retdirent); - } - else if ((istatus == RMS$_NMF) || (istatus == RMS$_FNF)) - return (retdirent); - - retfilename[retfilenamedesc.dsc$w_length] = '\0'; - - sp = strchr(retfilename, ' '); - if (sp != NULL) *sp = '\0'; - - sp = strrchr(retfilename, ']'); - if (sp != NULL) - sp++; - else - sp = retfilename; - - retdirent = (struct dirent *)calloc(1, sizeof(struct dirent)); - - strcpy(retdirent->d_name, sp); - retdirent->d_namlen = strlen(sp); - retdirent->d_fileno = 0; - retdirent->d_off = 0; - retdirent->d_reclen = DIRSIZ(retdirent); - - return (retdirent); -} - -long telldir( dirp ) -DIR *dirp; -{ - return(0); -} - -void seekdir( dirp, loc ) -DIR *dirp; -int loc; -{ - return; -} - -void rewinddir( dirp ) -DIR *dirp; -{ - lib$find_file_end (&dirp->dd_loc); -} - -void closedir( dirp ) -DIR *dirp; -{ - lib$find_file_end (&dirp->dd_loc); - - cfree ((void *) dirp->dd_fd); - cfree (dirp->dd_buf); - cfree (dirp); -} diff --git a/thirdparty/xpdf/3.02/src/goo/vms_dirent.h b/thirdparty/xpdf/3.02/src/goo/vms_dirent.h deleted file mode 100644 index 13e21a07..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_dirent.h +++ /dev/null @@ -1,67 +0,0 @@ -/* @(#)dirent.h 1.7 89/06/25 SMI */ - -/* - * Filesystem-independent directory information. - */ - -#ifndef __dirent_h -#define __dirent_h - -#ifdef __cplusplus -extern "C" { -#endif - -/* Make sure we don't get the V7 RTL dirent functions. These are broken. */ - -#ifndef __CRTL_VER -# define __CRTL_VER __VMS_VER -#endif -#if __CRTL_VER >= 70000000 -#include -#endif - -#include - -#define opendir goo_opendir -#define readdir goo_readdir -#define closedir goo_closedir -#define seekdir goo_seekdir -#define telldir goo_telldir -#define rewinddir goo_rewindir -#define DIR GOO_DIR - -#ifndef _POSIX_SOURCE -#define d_ino d_fileno /* compatability */ -#ifndef NULL -#define NULL 0 -#endif -#endif /* !_POSIX_SOURCE */ - -/* - * Definitions for library routines operating on directories. - */ -typedef struct __dirdesc { - unsigned long dd_fd; /* file descriptor */ - long dd_loc; /* buf offset of entry from last readddir() */ - long dd_size; /* amount of valid data in buffer */ - long dd_bsize; /* amount of entries read at a time */ - long dd_off; /* Current offset in dir (for telldir) */ - char *dd_buf; /* directory data buffer */ -} DIR; - -#include "vms_sys_dirent.h" - -extern DIR *opendir(char *dirname); -extern struct dirent *readdir(DIR *dirp); -extern void closedir(DIR *dirp); -#ifndef _POSIX_SOURCE -extern void seekdir(DIR *dirp, int loc); -extern long telldir(DIR *dirp); -#endif /* POSIX_SOURCE */ -extern void rewinddir(DIR *dirp); - -#ifdef __cplusplus -} -#endif - -#endif /* !__dirent_h */ diff --git a/thirdparty/xpdf/3.02/src/goo/vms_make.com b/thirdparty/xpdf/3.02/src/goo/vms_make.com deleted file mode 100644 index 676643fc..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_make.com +++ /dev/null @@ -1,82 +0,0 @@ -$!======================================================================== -$! -$! Goo library compile script for VMS. -$! -$! Written by Patrick Moreau, Martin P.J. Zinser. -$! -$! Copyright 1996-2003 Glyph & Cog, LLC -$! -$!======================================================================== -$! -$ GOO_CXXOBJS = "GString.obj,gmempp.obj,gfile.obj,ghash.obj,glist.obj" -$ GOO_CCOBJS = "gmem.obj,parseargs.obj,vms_directory.obj,vms_unix_times.obj" -$! -$ if f$extract(1,3,f$getsyi("Version")) .lts. "7.0" -$ then -$ GOO_CCOBJS = GOO_CCOBJS + ",vms_unlink.obj" -$ endif -$! -$ i = 0 -$ j = 0 -$COMPILE_CXX_LOOP: -$ file = f$element(i, ",",GOO_CXXOBJS) -$ if file .eqs. "," then goto COMPILE_CC_LOOP -$ i = i + 1 -$ name = f$parse(file,,,"NAME") -$ call make 'file "CXXCOMP ''name'.cc" - - 'name'.cc -$ goto COMPILE_CXX_LOOP -$! -$COMPILE_CC_LOOP: -$ file = f$element(j, ",",GOO_CCOBJS) -$ if file .eqs. "," then goto COMPILE_END -$ j = j + 1 -$ name = f$parse(file,,,"NAME") -$ call make 'file "CCOMP ''name'.c" - - 'name'.c -$ goto COMPILE_CC_LOOP -$! -$COMPILE_END: -$ call make libgoo.olb "lib/cre libgoo.olb ''GOO_CXXOBJS',''GOO_CCOBJS'" *.obj -$! -$ exit -$! -$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES -$ V = 'F$Verify(0) -$! P1 = What we are trying to make -$! P2 = Command to make it -$! P3 - P8 What it depends on -$ -$ If F$Search(P1) .Eqs. "" Then Goto Makeit -$ Time = F$CvTime(F$File(P1,"RDT")) -$arg=3 -$Loop: -$ Argument = P'arg -$ If Argument .Eqs. "" Then Goto Exit -$ El=0 -$Loop2: -$ File = F$Element(El," ",Argument) -$ If File .Eqs. " " Then Goto Endl -$ AFile = "" -$Loop3: -$ OFile = AFile -$ AFile = F$Search(File) -$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl -$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit -$ Goto Loop3 -$NextEL: -$ El = El + 1 -$ Goto Loop2 -$EndL: -$ arg=arg+1 -$ If arg .Le. 8 Then Goto Loop -$ Goto Exit -$ -$Makeit: -$ VV=F$VERIFY(0) -$ write sys$output P2 -$ 'P2 -$ VV='F$Verify(VV) -$Exit: -$ If V Then Set Verify -$ENDSUBROUTINE diff --git a/thirdparty/xpdf/3.02/src/goo/vms_sys_dirent.h b/thirdparty/xpdf/3.02/src/goo/vms_sys_dirent.h deleted file mode 100644 index 2c20d714..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_sys_dirent.h +++ /dev/null @@ -1,54 +0,0 @@ -/* @(#)dirent.h 1.4 89/06/16 SMI */ - -/* - * Filesystem-independent directory information. - * Directory entry structures are of variable length. - * Each directory entry is a struct dirent containing its file number, the - * offset of the next entry (a cookie interpretable only the filesystem - * type that generated it), the length of the entry, and the length of the - * name contained in the entry. These are followed by the name. The - * entire entry is padded with null bytes to a 4 byte boundary. All names - * are guaranteed null terminated. The maximum length of a name in a - * directory is MAXNAMLEN, plus a null byte. - */ - -#ifndef __sys_dirent_h -#define __sys_dirent_h - -#ifdef __cplusplus -extern "C" { -#endif - -#define dirent GOO_dirent - -struct dirent { - long d_off; /* offset of next disk dir entry */ - unsigned long d_fileno; /* file number of entry */ - unsigned short d_reclen; /* length of this record */ - unsigned short d_namlen; /* length of string in d_name */ - char d_name[255+1]; /* name (up to MAXNAMLEN + 1) */ -}; - -#ifndef _POSIX_SOURCE -/* - * It's unlikely to change, but make sure that sizeof d_name above is - * at least MAXNAMLEN + 1 (more may be added for padding). - */ -#define MAXNAMLEN 255 -/* - * The macro DIRSIZ(dp) gives the minimum amount of space required to represent - * a directory entry. For any directory entry dp->d_reclen >= DIRSIZ(dp). - * Specific filesystem types may use this macro to construct the value - * for d_reclen. - */ -#undef DIRSIZ -#define DIRSIZ(dp) \ - (((sizeof(struct dirent) - (MAXNAMLEN+1) + ((dp)->d_namlen+1)) +3) & ~3) - -#endif /* !_POSIX_SOURCE */ - -#ifdef __cplusplus -} -#endif - -#endif /* !__sys_dirent_h */ diff --git a/thirdparty/xpdf/3.02/src/goo/vms_unix_time.h b/thirdparty/xpdf/3.02/src/goo/vms_unix_time.h deleted file mode 100644 index f8e83825..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_unix_time.h +++ /dev/null @@ -1,102 +0,0 @@ -/* @(#)time.h 2.9 87/01/17 SMI; from UCB 7.1 6/4/86 */ - -/* - Definitions of various structures used on UNIX for - time-related syscalls. -*/ - -/* - * Copyright (c) 1982, 1986 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. - */ - -#ifndef _UNIX_TIME_ -#define _UNIX_TIME_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Structure returned by gettimeofday(2) system call, - * and used in other calls. - */ -#ifndef __DECC -struct timeval -{ - long tv_sec; /* seconds */ - long tv_usec; /* and microseconds */ -}; -#else -#if (__DECC_VER < 50200000) && (__VMS_VER < 70000000) -struct timeval -{ - long tv_sec; /* seconds */ - long tv_usec; /* and microseconds */ -}; -#endif /* __DECC_VER */ -#endif /* __DECC */ -struct timezone -{ - int tz_minuteswest; /* minutes west of Greenwich */ - int tz_dsttime; /* type of dst correction */ -}; - -#define DST_NONE 0 /* not on dst */ -#define DST_USA 1 /* USA style dst */ -#define DST_AUST 2 /* Australian style dst */ -#define DST_WET 3 /* Western European dst */ -#define DST_MET 4 /* Middle European dst */ -#define DST_EET 5 /* Eastern European dst */ -#define DST_CAN 6 /* Canada */ -#define DST_GB 7 /* Great Britain and Eire */ -#define DST_RUM 8 /* Rumania */ -#define DST_TUR 9 /* Turkey */ -#define DST_AUSTALT 10 /* Australian style with shift in 1986 */ - -/* - * Operations on timevals. - * - * NB: timercmp does not work for >= or <=. - */ -#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) -#define timercmp(tvp, uvp, cmp) \ - ((tvp)->tv_sec cmp (uvp)->tv_sec || \ - (tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) -#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 - -/* - * Names of the interval timers, and structure - * defining a timer setting. - */ -#define ITIMER_REAL 0 -#define ITIMER_VIRTUAL 1 -#define ITIMER_PROF 2 - -#ifndef __DECC -struct itimerval -{ - struct timeval it_interval; /* timer interval */ - struct timeval it_value; /* current value */ -}; -#else -#if (__DECC_VER < 50200000) && (__VMS_VER < 70000000) -struct itimerval -{ - struct timeval it_interval; /* timer interval */ - struct timeval it_value; /* current value */ -}; -#endif /* __DECC_VER */ -#endif /* __DECC */ - -#ifndef KERNEL -#include -#endif - -#ifdef __cplusplus -} -#endif - -#endif /*!_UNIX_TIME_*/ - diff --git a/thirdparty/xpdf/3.02/src/goo/vms_unix_times.c b/thirdparty/xpdf/3.02/src/goo/vms_unix_times.c deleted file mode 100644 index 004c0d04..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_unix_times.c +++ /dev/null @@ -1,42 +0,0 @@ -/* - * UNIX-style Time Functions - * - */ -#include -#include -#include -#include "vms_unix_time.h" - -/* - * gettimeofday(2) - Returns the current time - * - * NOTE: The timezone portion is useless on VMS. - * Even on UNIX, it is only provided for backwards - * compatibilty and is not guaranteed to be correct. - */ - -#if (__VMS_VER < 70000000) -int gettimeofday(tv, tz) -struct timeval *tv; -struct timezone *tz; -{ - timeb_t tmp_time; - - ftime(&tmp_time); - - if (tv != NULL) - { - tv->tv_sec = tmp_time.time; - tv->tv_usec = tmp_time.millitm * 1000; - } - - if (tz != NULL) - { - tz->tz_minuteswest = tmp_time.timezone; - tz->tz_dsttime = tmp_time.dstflag; - } - - return (0); - -} /*** End gettimeofday() ***/ -#endif diff --git a/thirdparty/xpdf/3.02/src/goo/vms_unlink.c b/thirdparty/xpdf/3.02/src/goo/vms_unlink.c deleted file mode 100644 index e2cf687d..00000000 --- a/thirdparty/xpdf/3.02/src/goo/vms_unlink.c +++ /dev/null @@ -1,22 +0,0 @@ -/* - * vms_unlink.c - * - * A UNIX-style unlink() function for VMS. - * - * Thanks to Patrick Moreau (pmoreau@cena.dgac.fr). - */ - -#include -#include -#include - -int unlink(char *filename) { - static struct dsc$descriptor_s file_desc; - - file_desc.dsc$w_length = strlen(filename); - file_desc.dsc$b_dtype = DSC$K_DTYPE_T; - file_desc.dsc$b_class = DSC$K_CLASS_S; - file_desc.dsc$a_pointer= filename; - - return (lib$delete_file(&file_desc)); -} diff --git a/thirdparty/xpdf/3.02/src/install-sh b/thirdparty/xpdf/3.02/src/install-sh deleted file mode 100644 index ebc66913..00000000 --- a/thirdparty/xpdf/3.02/src/install-sh +++ /dev/null @@ -1,250 +0,0 @@ -#! /bin/sh -# -# install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). -# -# Copyright 1991 by the Massachusetts Institute of Technology -# -# 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 M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. -# -# Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it -# when there is no Makefile. -# -# This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi - -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - else - instcmd=mkdir - fi -else - -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi - -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` - -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script - -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" - -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi - - pathcomp="${pathcomp}/" -done -fi - -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else - -# If we're going to rename the final executable, determine the name now. - - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi - -# don't allow the sed command to completely eliminate the filename - - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi - -# Make a temp file name in the proper directory. - - dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - - $doit $instcmd $src $dsttmp && - - trap "rm -f ${dsttmp}" 0 && - -# and set any options; do chmod last to preserve setuid bits - -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && - -# Now rename the file to the real destination. - - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile - -fi && - - -exit 0 diff --git a/thirdparty/xpdf/3.02/src/misc/hello.pdf b/thirdparty/xpdf/3.02/src/misc/hello.pdf deleted file mode 100644 index d097335982d205735c405b13605747b3b6891a6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 917 zcmZWoL2DC1811RZfY3wn{Phs1U^Ba$>?VOyk~UotwZ=_)N(xT1lXPXXQ)VU*#e<;r zTD`|hLGk3>U!Wp_2f=^PlP8bj!EZL(Y)R*`yYHL#zW2SEEwq~chFx?>;q&j)Gg1Ky z#NlJIxk>NwWT=mzibz2HDArs8^<$=allMi)x3-AVlCu$+OiMpX9c!tv{&xCp|I7Y| zN7rt=c=+`b*<0)VZM-M`GFgjyEAL*BbDx|q*WdJt*H3>=r_WCQ{5zYjet&(d_-o~) z{;^(MdM;OA@+8cJ@y(bq7R<9!BN7uu@R?%n+uh5p)@zcZF1F@(XkdXC8eB8 zayi+_$rxNX?&ED)Z^SGNqXcdr38iO3;1waV&Q+}J;w4zv=hzth0%qA5?gD0eSNq!4Oa8QEQOqU&LO|Qm mQ;xF%4TQi`#*6}>canhslUI6Slx9+=DR^az6bic!eDWWN9|Exe diff --git a/thirdparty/xpdf/3.02/src/misc/xpdf.dt b/thirdparty/xpdf/3.02/src/misc/xpdf.dt deleted file mode 100644 index d3d41b7c..00000000 --- a/thirdparty/xpdf/3.02/src/misc/xpdf.dt +++ /dev/null @@ -1,28 +0,0 @@ -# simple CDE action for xpdf -# written by Roland.Mainz@informatik.med.uni-giessen.de -# -# To use, copy this file into $HOME/.dt/types -# -# NOTE: this overrides the actions AcroRead and AcroReadPrint -# defined in /usr/dt/appconfig/types/C/solaris.dt - -ACTION AcroRead -{ - TYPE COMMAND - WINDOW_TYPE NO_STDIO - EXEC_STRING xpdf "%(File)Arg_1%" -} - -# NOTE: Add a '-level1' switch to pdftops if your printer does not -# support Level 2 Postscript. -ACTION AcroReadPrint -{ - TYPE COMMAND - WINDOW_TYPE NO_STDIO - EXEC_STRING ksh -c ' \ - MYFILE="%(File)Arg_1%" ; \ - pdftops "${MYFILE}" /dev/stdout | \ - dtlp -w -b "${MYFILE}"' -} - -# EOF. diff --git a/thirdparty/xpdf/3.02/src/ms_make.bat b/thirdparty/xpdf/3.02/src/ms_make.bat deleted file mode 100644 index 8dbf6a06..00000000 --- a/thirdparty/xpdf/3.02/src/ms_make.bat +++ /dev/null @@ -1,120 +0,0 @@ -set CC=cl -set CFLAGS=/DWIN32 /I.. /I..\goo /I..\fofi /O2 /nologo -set CXX=cl -set CXXFLAGS=%CFLAGS% /TP -set LIBPROG=lib -set LINKFLAGS=/MT /nologo - -copy aconf-win32.h aconf.h - -cd goo -%CXX% %CXXFLAGS% /c GHash.cc -%CXX% %CXXFLAGS% /c GList.cc -%CXX% %CXXFLAGS% /c GString.cc -%CXX% %CXXFLAGS% /c gmem.cc -%CXX% %CXXFLAGS% /c gmempp.cc -%CXX% %CXXFLAGS% /c gfile.cc -%CC% %CFLAGS% /c parseargs.c -%LIBPROG% /nologo /out:Goo.lib GHash.obj GList.obj GString.obj gmempp.obj gfile.obj gmem.obj parseargs.obj - -cd ..\fofi -%CXX% %CXXFLAGS% /c FoFiBase.cc -%CXX% %CXXFLAGS% /c FoFiEncodings.cc -%CXX% %CXXFLAGS% /c FoFiIdentifier.cc -%CXX% %CXXFLAGS% /c FoFiTrueType.cc -%CXX% %CXXFLAGS% /c FoFiType1.cc -%CXX% %CXXFLAGS% /c FoFiType1C.cc -%LIBPROG% /nologo /out:fofi.lib FoFiBase.obj FoFiEncodings.obj FoFiIdentifier.obj FoFiTrueType.obj FoFiType1.obj FoFiType1C.obj - -cd ..\xpdf -%CXX% %CXXFLAGS% /c Annot.cc -%CXX% %CXXFLAGS% /c Array.cc -%CXX% %CXXFLAGS% /c BuiltinFont.cc -%CXX% %CXXFLAGS% /c BuiltinFontTables.cc -%CXX% %CXXFLAGS% /c CMap.cc -%CXX% %CXXFLAGS% /c Catalog.cc -%CXX% %CXXFLAGS% /c CharCodeToUnicode.cc -%CXX% %CXXFLAGS% /c Decrypt.cc -%CXX% %CXXFLAGS% /c Dict.cc -%CXX% %CXXFLAGS% /c Error.cc -%CXX% %CXXFLAGS% /c FontEncodingTables.cc -%CXX% %CXXFLAGS% /c Function.cc -%CXX% %CXXFLAGS% /c Gfx.cc -%CXX% %CXXFLAGS% /c GfxFont.cc -%CXX% %CXXFLAGS% /c GfxState.cc -%CXX% %CXXFLAGS% /c GlobalParams.cc -%CXX% %CXXFLAGS% /c ImageOutputDev.cc -%CXX% %CXXFLAGS% /c JArithmeticDecoder.cc -%CXX% %CXXFLAGS% /c JBIG2Stream.cc -%CXX% %CXXFLAGS% /c JPXStream.cc -%CXX% %CXXFLAGS% /c Lexer.cc -%CXX% %CXXFLAGS% /c Link.cc -%CXX% %CXXFLAGS% /c NameToCharCode.cc -%CXX% %CXXFLAGS% /c Object.cc -%CXX% %CXXFLAGS% /c OptionalContent.cc -%CXX% %CXXFLAGS% /c Outline.cc -%CXX% %CXXFLAGS% /c OutputDev.cc -%CXX% %CXXFLAGS% /c PDFDoc.cc -%CXX% %CXXFLAGS% /c PDFDocEncoding.cc -%CXX% %CXXFLAGS% /c PSOutputDev.cc -%CXX% %CXXFLAGS% /c PSTokenizer.cc -%CXX% %CXXFLAGS% /c Page.cc -%CXX% %CXXFLAGS% /c Parser.cc -%CXX% %CXXFLAGS% /c SecurityHandler.cc -%CXX% %CXXFLAGS% /c Stream.cc -%CXX% %CXXFLAGS% /c TextOutputDev.cc -%CXX% %CXXFLAGS% /c UnicodeMap.cc -%CXX% %CXXFLAGS% /c UnicodeTypeTable.cc -%CXX% %CXXFLAGS% /c XRef.cc -%CXX% %CXXFLAGS% /c pdftops.cc -%CXX% %CXXFLAGS% /c pdftotext.cc -%CXX% %CXXFLAGS% /c pdfinfo.cc -%CXX% %CXXFLAGS% /c pdffonts.cc -%CXX% %CXXFLAGS% /c pdfimages.cc - -%CXX% %LINKFLAGS% /Fepdftops.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj OptionalContent.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSOutputDev.obj PSTokenizer.obj SecurityHandler.obj Stream.obj UnicodeMap.obj XRef.obj pdftops.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib - -%CXX% %LINKFLAGS% /Fepdftotext.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj OptionalContent.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj Stream.obj TextOutputDev.obj UnicodeMap.obj UnicodeTypeTable.obj XRef.obj pdftotext.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib - -%CXX% %LINKFLAGS% /Fepdfinfo.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj OptionalContent.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj Stream.obj UnicodeMap.obj XRef.obj pdfinfo.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib - -%CXX% %LINKFLAGS% /Fepdffonts.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj OptionalContent.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj Stream.obj UnicodeMap.obj XRef.obj pdffonts.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib - -%CXX% %LINKFLAGS% /Fepdfimages.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj ImageOutputDev.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj OptionalContent.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj Stream.obj UnicodeMap.obj XRef.obj pdfimages.obj ..\fofi\fofi.lib ..\goo\Goo.lib shell32.lib user32.lib gdi32.lib advapi32.lib - -cd .. - -rem --- This part will only work if you have FreeType installed --- - -set FT2DIR=..\freetype-2.3.1 -set CXXFLAGS=%CXXFLAGS% /I..\splash /I%FT2DIR%\include - -cd splash -%CXX% %CXXFLAGS% /c Splash.cc -%CXX% %CXXFLAGS% /c SplashBitmap.cc -%CXX% %CXXFLAGS% /c SplashClip.cc -%CXX% %CXXFLAGS% /c SplashFTFont.cc -%CXX% %CXXFLAGS% /c SplashFTFontEngine.cc -%CXX% %CXXFLAGS% /c SplashFTFontFile.cc -%CXX% %CXXFLAGS% /c SplashFont.cc -%CXX% %CXXFLAGS% /c SplashFontEngine.cc -%CXX% %CXXFLAGS% /c SplashFontFile.cc -%CXX% %CXXFLAGS% /c SplashFontFileID.cc -%CXX% %CXXFLAGS% /c SplashPath.cc -%CXX% %CXXFLAGS% /c SplashPattern.cc -%CXX% %CXXFLAGS% /c SplashScreen.cc -%CXX% %CXXFLAGS% /c SplashState.cc -%CXX% %CXXFLAGS% /c SplashT1Font.cc -%CXX% %CXXFLAGS% /c SplashT1FontEngine.cc -%CXX% %CXXFLAGS% /c SplashT1FontFile.cc -%CXX% %CXXFLAGS% /c SplashXPath.cc -%CXX% %CXXFLAGS% /c SplashXPathScanner.cc -%LIBPROG% /nologo /out:splash.lib Splash.obj SplashBitmap.obj SplashClip.obj SplashFTFont.obj SplashFTFontEngine.obj SplashFTFontFile.obj SplashFont.obj SplashFontEngine.obj SplashFontFile.obj SplashFontFileID.obj SplashPath.obj SplashPattern.obj SplashScreen.obj SplashState.obj SplashT1Font.obj SplashT1FontEngine.obj SplashT1FontFile.obj SplashXPath.obj SplashXPathScanner.obj - -cd ..\xpdf -%CXX% %CXXFLAGS% /c SplashOutputDev.cc -%CXX% %CXXFLAGS% /c pdftoppm.cc - -%CXX% %LINKFLAGS% /Fepdftoppm.exe Annot.obj Array.obj BuiltinFont.obj BuiltinFontTables.obj Catalog.obj CharCodeToUnicode.obj CMap.obj Decrypt.obj Dict.obj Error.obj FontEncodingTables.obj Function.obj Gfx.obj GfxFont.obj GfxState.obj GlobalParams.obj JArithmeticDecoder.obj JBIG2Stream.obj JPXStream.obj Lexer.obj Link.obj NameToCharCode.obj Object.obj OptionalContent.obj Outline.obj OutputDev.obj Page.obj Parser.obj PDFDoc.obj PDFDocEncoding.obj PSTokenizer.obj SecurityHandler.obj SplashOutputDev.obj Stream.obj UnicodeMap.obj UnicodeTypeTable.obj XRef.obj pdftoppm.obj ..\splash\splash.lib ..\fofi\fofi.lib ..\goo\Goo.lib %FT2DIR%\freetype2.lib shell32.lib user32.lib gdi32.lib advapi32.lib - -cd .. diff --git a/thirdparty/xpdf/3.02/src/splash/Makefile.dep b/thirdparty/xpdf/3.02/src/splash/Makefile.dep deleted file mode 100644 index e69de29b..00000000 diff --git a/thirdparty/xpdf/3.02/src/splash/Makefile.in b/thirdparty/xpdf/3.02/src/splash/Makefile.in deleted file mode 100644 index 66c449b3..00000000 --- a/thirdparty/xpdf/3.02/src/splash/Makefile.in +++ /dev/null @@ -1,99 +0,0 @@ -#======================================================================== -# -# Splash library Makefile -# -# Copyright 2003 Glyph & Cog, LLC -# -#======================================================================== - -SHELL = /bin/sh - -srcdir = @srcdir@ -VPATH = @srcdir@ - -GOOSRCDIR = $(srcdir)/../goo -GOOLIBDIR = ../goo -FOFISRCDIR = $(srcdir)/../fofi -FOFILIBDIR = ../fofi - -CXXFLAGS = @CXXFLAGS@ @DEFS@ -I.. -I$(GOOSRCDIR) -I$(FOFISRCDIR) -I$(srcdir) @t1_CFLAGS@ @freetype2_CFLAGS@ - -CXX = @CXX@ -AR = @AR@ -RANLIB = @RANLIB@ - -LIBPREFIX = @LIBPREFIX@ - -#------------------------------------------------------------------------ - -.SUFFIXES: .cc - -.cc.o: - $(CXX) $(CXXFLAGS) -c $< - -#------------------------------------------------------------------------ - -CXX_SRC = \ - $(srcdir)/Splash.cc \ - $(srcdir)/SplashBitmap.cc \ - $(srcdir)/SplashClip.cc \ - $(srcdir)/SplashFTFont.cc \ - $(srcdir)/SplashFTFontEngine.cc \ - $(srcdir)/SplashFTFontFile.cc \ - $(srcdir)/SplashFont.cc \ - $(srcdir)/SplashFontEngine.cc \ - $(srcdir)/SplashFontFile.cc \ - $(srcdir)/SplashFontFileID.cc \ - $(srcdir)/SplashPath.cc \ - $(srcdir)/SplashPattern.cc \ - $(srcdir)/SplashScreen.cc \ - $(srcdir)/SplashState.cc \ - $(srcdir)/SplashT1Font.cc \ - $(srcdir)/SplashT1FontEngine.cc \ - $(srcdir)/SplashT1FontFile.cc \ - $(srcdir)/SplashXPath.cc \ - $(srcdir)/SplashXPathScanner.cc - -#------------------------------------------------------------------------ - -all: $(LIBPREFIX)splash.a - -#------------------------------------------------------------------------ - -SPLASH_OBJS = \ - Splash.o \ - SplashBitmap.o \ - SplashClip.o \ - SplashFTFont.o \ - SplashFTFontEngine.o \ - SplashFTFontFile.o \ - SplashFont.o \ - SplashFontEngine.o \ - SplashFontFile.o \ - SplashFontFileID.o \ - SplashPath.o \ - SplashPattern.o \ - SplashScreen.o \ - SplashState.o \ - SplashT1Font.o \ - SplashT1FontEngine.o \ - SplashT1FontFile.o \ - SplashXPath.o \ - SplashXPathScanner.o - -$(LIBPREFIX)splash.a: $(SPLASH_OBJS) - rm -f $(LIBPREFIX)splash.a - $(AR) $(LIBPREFIX)splash.a $(SPLASH_OBJS) - $(RANLIB) $(LIBPREFIX)splash.a - -#------------------------------------------------------------------------ - -clean: - rm -f $(SPLASH_OBJS) $(LIBPREFIX)splash.a - -#------------------------------------------------------------------------ - -depend: - $(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >Makefile.dep - -include Makefile.dep diff --git a/thirdparty/xpdf/3.02/src/splash/Splash.cc b/thirdparty/xpdf/3.02/src/splash/Splash.cc deleted file mode 100644 index fb59b464..00000000 --- a/thirdparty/xpdf/3.02/src/splash/Splash.cc +++ /dev/null @@ -1,4833 +0,0 @@ -//======================================================================== -// -// Splash.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "gmem.h" -#include "SplashErrorCodes.h" -#include "SplashMath.h" -#include "SplashBitmap.h" -#include "SplashState.h" -#include "SplashPath.h" -#include "SplashXPath.h" -#include "SplashXPathScanner.h" -#include "SplashPattern.h" -#include "SplashScreen.h" -#include "SplashFont.h" -#include "SplashGlyphBitmap.h" -#include "Splash.h" - -//------------------------------------------------------------------------ - -#define splashAAGamma 1.5 - -// distance of Bezier control point from center for circle approximation -// = (4 * (sqrt(2) - 1) / 3) * r -#define bezierCircle ((SplashCoord)0.55228475) -#define bezierCircle2 ((SplashCoord)(0.5 * 0.55228475)) - -// 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); -} - -// The PDF spec says that all pixels whose *centers* lie within the -// image target region get painted, so we want to round n+0.5 down to -// n. But this causes problems, e.g., with PDF files that fill a -// rectangle with black and then draw an image to the exact same -// rectangle, so we instead use the fill scan conversion rule. -// However, the correct rule works better for glyphs, so we also -// provide that option in fillImageMask. -#if 0 -static inline int imgCoordMungeLower(SplashCoord x) { - return splashCeil(x + 0.5) - 1; -} -static inline int imgCoordMungeUpper(SplashCoord x) { - return splashCeil(x + 0.5) - 1; -} -#else -static inline int imgCoordMungeLower(SplashCoord x) { - return splashFloor(x); -} -static inline int imgCoordMungeUpper(SplashCoord x) { - return splashFloor(x) + 1; -} -static inline int imgCoordMungeLowerC(SplashCoord x, GBool glyphMode) { - return glyphMode ? (splashCeil(x + 0.5) - 1) : splashFloor(x); -} -static inline int imgCoordMungeUpperC(SplashCoord x, GBool glyphMode) { - return glyphMode ? (splashCeil(x + 0.5) - 1) : (splashFloor(x) + 1); -} -#endif - -// Used by drawImage and fillImageMask to divide the target -// quadrilateral into sections. -struct ImageSection { - int y0, y1; // actual y range - int ia0, ia1; // vertex indices for edge A - int ib0, ib1; // vertex indices for edge A - SplashCoord xa0, ya0, xa1, ya1; // edge A - SplashCoord dxdya; // slope of edge A - SplashCoord xb0, yb0, xb1, yb1; // edge B - SplashCoord dxdyb; // slope of edge B -}; - -//------------------------------------------------------------------------ -// SplashPipe -//------------------------------------------------------------------------ - -#define splashPipeMaxStages 9 - -struct SplashPipe { - // pixel coordinates - int x, y; - - // source pattern - SplashPattern *pattern; - - // source alpha and color - Guchar aInput; - GBool usesShape; - SplashColorPtr cSrc; - SplashColor cSrcVal; - - // non-isolated group alpha0 - Guchar *alpha0Ptr; - - // soft mask - SplashColorPtr softMaskPtr; - - // destination alpha and color - SplashColorPtr destColorPtr; - int destColorMask; - Guchar *destAlphaPtr; - - // shape - Guchar shape; - - // result alpha and color - GBool noTransparency; - SplashPipeResultColorCtrl resultColorCtrl; - - // non-isolated group correction - int nonIsolatedGroup; - - // the "run" function - void (Splash::*run)(SplashPipe *pipe); -}; - -SplashPipeResultColorCtrl Splash::pipeResultColorNoAlphaBlend[] = { - splashPipeResultColorNoAlphaBlendMono, - splashPipeResultColorNoAlphaBlendMono, - splashPipeResultColorNoAlphaBlendRGB, - splashPipeResultColorNoAlphaBlendRGB -#if SPLASH_CMYK - , - splashPipeResultColorNoAlphaBlendCMYK -#endif -}; - -SplashPipeResultColorCtrl Splash::pipeResultColorAlphaNoBlend[] = { - splashPipeResultColorAlphaNoBlendMono, - splashPipeResultColorAlphaNoBlendMono, - splashPipeResultColorAlphaNoBlendRGB, - splashPipeResultColorAlphaNoBlendRGB -#if SPLASH_CMYK - , - splashPipeResultColorAlphaNoBlendCMYK -#endif -}; - -SplashPipeResultColorCtrl Splash::pipeResultColorAlphaBlend[] = { - splashPipeResultColorAlphaBlendMono, - splashPipeResultColorAlphaBlendMono, - splashPipeResultColorAlphaBlendRGB, - splashPipeResultColorAlphaBlendRGB -#if SPLASH_CMYK - , - splashPipeResultColorAlphaBlendCMYK -#endif -}; - -//------------------------------------------------------------------------ - -static void blendXor(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - - for (i = 0; i < splashColorModeNComps[cm]; ++i) { - blend[i] = src[i] ^ dest[i]; - } -} - -//------------------------------------------------------------------------ -// modified region -//------------------------------------------------------------------------ - -void Splash::clearModRegion() { - modXMin = bitmap->getWidth(); - modYMin = bitmap->getHeight(); - modXMax = -1; - modYMax = -1; -} - -inline void Splash::updateModX(int x) { - if (x < modXMin) { - modXMin = x; - } - if (x > modXMax) { - modXMax = x; - } -} - -inline void Splash::updateModY(int y) { - if (y < modYMin) { - modYMin = y; - } - if (y > modYMax) { - modYMax = y; - } -} - -//------------------------------------------------------------------------ -// pipeline -//------------------------------------------------------------------------ - -inline void Splash::pipeInit(SplashPipe *pipe, int x, int y, - SplashPattern *pattern, SplashColorPtr cSrc, - Guchar aInput, GBool usesShape, - GBool nonIsolatedGroup) { - pipeSetXY(pipe, x, y); - pipe->pattern = NULL; - - // source color - if (pattern) { - if (pattern->isStatic()) { - pattern->getColor(x, y, pipe->cSrcVal); - } else { - pipe->pattern = pattern; - } - pipe->cSrc = pipe->cSrcVal; - } else { - pipe->cSrc = cSrc; - } - - // source alpha - pipe->aInput = aInput; - pipe->usesShape = usesShape; - - // result alpha - if (aInput == 255 && !state->softMask && !usesShape && - !state->inNonIsolatedGroup) { - pipe->noTransparency = gTrue; - } else { - pipe->noTransparency = gFalse; - } - - // result color - if (pipe->noTransparency) { - // the !state->blendFunc case is handled separately in pipeRun - pipe->resultColorCtrl = pipeResultColorNoAlphaBlend[bitmap->mode]; - } else if (!state->blendFunc) { - pipe->resultColorCtrl = pipeResultColorAlphaNoBlend[bitmap->mode]; - } else { - pipe->resultColorCtrl = pipeResultColorAlphaBlend[bitmap->mode]; - } - - // non-isolated group correction - if (nonIsolatedGroup) { - pipe->nonIsolatedGroup = splashColorModeNComps[bitmap->mode]; - } else { - pipe->nonIsolatedGroup = 0; - } - - // select the 'run' function - pipe->run = &Splash::pipeRun; - if (!pipe->pattern && pipe->noTransparency && !state->blendFunc) { - if (bitmap->mode == splashModeMono1 && !pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunSimpleMono1; - } else if (bitmap->mode == splashModeMono8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunSimpleMono8; - } else if (bitmap->mode == splashModeRGB8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunSimpleRGB8; - } else if (bitmap->mode == splashModeBGR8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunSimpleBGR8; -#if SPLASH_CMYK - } else if (bitmap->mode == splashModeCMYK8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunSimpleCMYK8; -#endif - } - } else if (!pipe->pattern && !pipe->noTransparency && !state->softMask && - pipe->usesShape && - !(state->inNonIsolatedGroup && alpha0Bitmap->alpha) && - !state->blendFunc && pipe->nonIsolatedGroup == 0) { - if (bitmap->mode == splashModeMono1 && !pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunAAMono1; - } else if (bitmap->mode == splashModeMono8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunAAMono8; - } else if (bitmap->mode == splashModeRGB8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunAARGB8; - } else if (bitmap->mode == splashModeBGR8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunAABGR8; -#if SPLASH_CMYK - } else if (bitmap->mode == splashModeCMYK8 && pipe->destAlphaPtr) { - pipe->run = &Splash::pipeRunAACMYK8; -#endif - } - } -} - -// general case -void Splash::pipeRun(SplashPipe *pipe) { - Guchar aSrc, aDest, alpha2, alpha0, aResult; - SplashColor cSrc2, cDest, cDest2, cBlend; - Guchar cResult0, cResult1, cResult2, cResult3; - - //----- source color - - // static pattern: handled in pipeInit - // fixed color: handled in pipeInit - - // dynamic pattern - if (pipe->pattern) { - pipe->pattern->getColor(pipe->x, pipe->y, pipe->cSrcVal); - } - - if (pipe->noTransparency && !state->blendFunc) { - - //----- write destination pixel - - switch (bitmap->mode) { - case splashModeMono1: - cResult0 = pipe->cSrc[0]; - if (state->screen->test(pipe->x, pipe->y, cResult0)) { - *pipe->destColorPtr |= pipe->destColorMask; - } else { - *pipe->destColorPtr &= ~pipe->destColorMask; - } - if (!(pipe->destColorMask >>= 1)) { - pipe->destColorMask = 0x80; - ++pipe->destColorPtr; - } - break; - case splashModeMono8: - *pipe->destColorPtr++ = pipe->cSrc[0]; - break; - case splashModeRGB8: - *pipe->destColorPtr++ = pipe->cSrc[0]; - *pipe->destColorPtr++ = pipe->cSrc[1]; - *pipe->destColorPtr++ = pipe->cSrc[2]; - break; - case splashModeBGR8: - *pipe->destColorPtr++ = pipe->cSrc[2]; - *pipe->destColorPtr++ = pipe->cSrc[1]; - *pipe->destColorPtr++ = pipe->cSrc[0]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - if (state->overprintMask & 1) { - pipe->destColorPtr[0] = pipe->cSrc[0]; - } - if (state->overprintMask & 2) { - pipe->destColorPtr[1] = pipe->cSrc[1]; - } - if (state->overprintMask & 4) { - pipe->destColorPtr[2] = pipe->cSrc[2]; - } - if (state->overprintMask & 8) { - pipe->destColorPtr[3] = pipe->cSrc[3]; - } - pipe->destColorPtr += 4; - break; -#endif - } - if (pipe->destAlphaPtr) { - *pipe->destAlphaPtr++ = 255; - } - - } else { - - //----- read destination pixel - - switch (bitmap->mode) { - case splashModeMono1: - cDest[0] = (*pipe->destColorPtr & pipe->destColorMask) ? 0xff : 0x00; - break; - case splashModeMono8: - cDest[0] = *pipe->destColorPtr; - break; - case splashModeRGB8: - cDest[0] = pipe->destColorPtr[0]; - cDest[1] = pipe->destColorPtr[1]; - cDest[2] = pipe->destColorPtr[2]; - break; - case splashModeBGR8: - cDest[0] = pipe->destColorPtr[2]; - cDest[1] = pipe->destColorPtr[1]; - cDest[2] = pipe->destColorPtr[0]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - cDest[0] = pipe->destColorPtr[0]; - cDest[1] = pipe->destColorPtr[1]; - cDest[2] = pipe->destColorPtr[2]; - cDest[3] = pipe->destColorPtr[3]; - break; -#endif - } - if (pipe->destAlphaPtr) { - aDest = *pipe->destAlphaPtr; - } else { - aDest = 0xff; - } - - //----- blend function - - if (state->blendFunc) { -#if SPLASH_CMYK - if (bitmap->mode == splashModeCMYK8) { - // convert colors to additive - cSrc2[0] = 0xff - pipe->cSrc[0]; - cSrc2[1] = 0xff - pipe->cSrc[1]; - cSrc2[2] = 0xff - pipe->cSrc[2]; - cSrc2[3] = 0xff - pipe->cSrc[3]; - cDest2[0] = 0xff - cDest[0]; - cDest2[1] = 0xff - cDest[1]; - cDest2[2] = 0xff - cDest[2]; - cDest2[3] = 0xff - cDest[3]; - (*state->blendFunc)(cSrc2, cDest2, cBlend, bitmap->mode); - // convert result back to subtractive - cBlend[0] = 0xff - cBlend[0]; - cBlend[1] = 0xff - cBlend[1]; - cBlend[2] = 0xff - cBlend[2]; - cBlend[3] = 0xff - cBlend[3]; - } else -#endif - (*state->blendFunc)(pipe->cSrc, cDest, cBlend, bitmap->mode); - } - - //----- source alpha - - if (state->softMask) { - if (pipe->usesShape) { - aSrc = div255(div255(pipe->aInput * *pipe->softMaskPtr++) * - pipe->shape); - } else { - aSrc = div255(pipe->aInput * *pipe->softMaskPtr++); - } - } else if (pipe->usesShape) { - aSrc = div255(pipe->aInput * pipe->shape); - } else { - aSrc = pipe->aInput; - } - - //----- result alpha and non-isolated group element correction - - if (pipe->noTransparency) { - alpha2 = aResult = 255; - } else { - aResult = aSrc + aDest - div255(aSrc * aDest); - - if (pipe->alpha0Ptr) { - alpha0 = *pipe->alpha0Ptr++; - alpha2 = aResult + alpha0 - div255(aResult * alpha0); - } else { - alpha2 = aResult; - } - } - - //----- result color - - cResult0 = cResult1 = cResult2 = cResult3 = 0; // make gcc happy - - switch (pipe->resultColorCtrl) { - -#if SPLASH_CMYK - case splashPipeResultColorNoAlphaBlendCMYK: - cResult3 = div255((255 - aDest) * pipe->cSrc[3] + aDest * cBlend[3]); -#endif - case splashPipeResultColorNoAlphaBlendRGB: - cResult2 = div255((255 - aDest) * pipe->cSrc[2] + aDest * cBlend[2]); - cResult1 = div255((255 - aDest) * pipe->cSrc[1] + aDest * cBlend[1]); - case splashPipeResultColorNoAlphaBlendMono: - cResult0 = div255((255 - aDest) * pipe->cSrc[0] + aDest * cBlend[0]); - break; - - case splashPipeResultColorAlphaNoBlendMono: - if (alpha2 == 0) { - cResult0 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - } - break; - case splashPipeResultColorAlphaNoBlendRGB: - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * pipe->cSrc[1]) / alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * pipe->cSrc[2]) / alpha2); - } - break; -#if SPLASH_CMYK - case splashPipeResultColorAlphaNoBlendCMYK: - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - cResult3 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * pipe->cSrc[1]) / alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * pipe->cSrc[2]) / alpha2); - cResult3 = (Guchar)(((alpha2 - aSrc) * cDest[3] + - aSrc * pipe->cSrc[3]) / alpha2); - } - break; -#endif - - case splashPipeResultColorAlphaBlendMono: - if (alpha2 == 0) { - cResult0 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * ((255 - aDest) * pipe->cSrc[0] + - aDest * cBlend[0]) / 255) / - alpha2); - } - break; - case splashPipeResultColorAlphaBlendRGB: - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * ((255 - aDest) * pipe->cSrc[0] + - aDest * cBlend[0]) / 255) / - alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * ((255 - aDest) * pipe->cSrc[1] + - aDest * cBlend[1]) / 255) / - alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * ((255 - aDest) * pipe->cSrc[2] + - aDest * cBlend[2]) / 255) / - alpha2); - } - break; -#if SPLASH_CMYK - case splashPipeResultColorAlphaBlendCMYK: - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - cResult3 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * ((255 - aDest) * pipe->cSrc[0] + - aDest * cBlend[0]) / 255) / - alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * ((255 - aDest) * pipe->cSrc[1] + - aDest * cBlend[1]) / 255) / - alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * ((255 - aDest) * pipe->cSrc[2] + - aDest * cBlend[2]) / 255) / - alpha2); - cResult3 = (Guchar)(((alpha2 - aSrc) * cDest[3] + - aSrc * ((255 - aDest) * pipe->cSrc[3] + - aDest * cBlend[3]) / 255) / - alpha2); - } - break; -#endif - } - - //----- non-isolated group correction - - if (aResult != 0) { - switch (pipe->nonIsolatedGroup) { -#if SPLASH_CMYK - case 4: - cResult3 += (cResult3 - cDest[3]) * aDest * - (255 - aResult) / (255 * aResult); -#endif - case 3: - cResult2 += (cResult2 - cDest[2]) * aDest * - (255 - aResult) / (255 * aResult); - cResult1 += (cResult1 - cDest[1]) * aDest * - (255 - aResult) / (255 * aResult); - case 1: - cResult0 += (cResult0 - cDest[0]) * aDest * - (255 - aResult) / (255 * aResult); - case 0: - break; - } - } - - //----- write destination pixel - - switch (bitmap->mode) { - case splashModeMono1: - if (state->screen->test(pipe->x, pipe->y, cResult0)) { - *pipe->destColorPtr |= pipe->destColorMask; - } else { - *pipe->destColorPtr &= ~pipe->destColorMask; - } - if (!(pipe->destColorMask >>= 1)) { - pipe->destColorMask = 0x80; - ++pipe->destColorPtr; - } - break; - case splashModeMono8: - *pipe->destColorPtr++ = cResult0; - break; - case splashModeRGB8: - *pipe->destColorPtr++ = cResult0; - *pipe->destColorPtr++ = cResult1; - *pipe->destColorPtr++ = cResult2; - break; - case splashModeBGR8: - *pipe->destColorPtr++ = cResult2; - *pipe->destColorPtr++ = cResult1; - *pipe->destColorPtr++ = cResult0; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - if (state->overprintMask & 1) { - pipe->destColorPtr[0] = cResult0; - } - if (state->overprintMask & 2) { - pipe->destColorPtr[1] = cResult1; - } - if (state->overprintMask & 4) { - pipe->destColorPtr[2] = cResult2; - } - if (state->overprintMask & 8) { - pipe->destColorPtr[3] = cResult3; - } - pipe->destColorPtr += 4; - break; -#endif - } - if (pipe->destAlphaPtr) { - *pipe->destAlphaPtr++ = aResult; - } - - } - - ++pipe->x; -} - -// special case: -// !pipe->pattern && pipe->noTransparency && !state->blendFunc && -// bitmap->mode == splashModeMono1 && !pipe->destAlphaPtr) { -void Splash::pipeRunSimpleMono1(SplashPipe *pipe) { - Guchar cResult0; - - //----- write destination pixel - cResult0 = pipe->cSrc[0]; - if (state->screen->test(pipe->x, pipe->y, cResult0)) { - *pipe->destColorPtr |= pipe->destColorMask; - } else { - *pipe->destColorPtr &= ~pipe->destColorMask; - } - if (!(pipe->destColorMask >>= 1)) { - pipe->destColorMask = 0x80; - ++pipe->destColorPtr; - } - - ++pipe->x; -} - -// special case: -// !pipe->pattern && pipe->noTransparency && !state->blendFunc && -// bitmap->mode == splashModeMono8 && pipe->destAlphaPtr) { -void Splash::pipeRunSimpleMono8(SplashPipe *pipe) { - //----- write destination pixel - *pipe->destColorPtr++ = pipe->cSrc[0]; - *pipe->destAlphaPtr++ = 255; - - ++pipe->x; -} - -// special case: -// !pipe->pattern && pipe->noTransparency && !state->blendFunc && -// bitmap->mode == splashModeRGB8 && pipe->destAlphaPtr) { -void Splash::pipeRunSimpleRGB8(SplashPipe *pipe) { - //----- write destination pixel - *pipe->destColorPtr++ = pipe->cSrc[0]; - *pipe->destColorPtr++ = pipe->cSrc[1]; - *pipe->destColorPtr++ = pipe->cSrc[2]; - *pipe->destAlphaPtr++ = 255; - - ++pipe->x; -} - -// special case: -// !pipe->pattern && pipe->noTransparency && !state->blendFunc && -// bitmap->mode == splashModeBGR8 && pipe->destAlphaPtr) { -void Splash::pipeRunSimpleBGR8(SplashPipe *pipe) { - //----- write destination pixel - *pipe->destColorPtr++ = pipe->cSrc[2]; - *pipe->destColorPtr++ = pipe->cSrc[1]; - *pipe->destColorPtr++ = pipe->cSrc[0]; - *pipe->destAlphaPtr++ = 255; - - ++pipe->x; -} - -#if SPLASH_CMYK -// special case: -// !pipe->pattern && pipe->noTransparency && !state->blendFunc && -// bitmap->mode == splashModeCMYK8 && pipe->destAlphaPtr) { -void Splash::pipeRunSimpleCMYK8(SplashPipe *pipe) { - //----- write destination pixel - if (state->overprintMask & 1) { - pipe->destColorPtr[0] = pipe->cSrc[0]; - } - if (state->overprintMask & 2) { - pipe->destColorPtr[1] = pipe->cSrc[1]; - } - if (state->overprintMask & 4) { - pipe->destColorPtr[2] = pipe->cSrc[2]; - } - if (state->overprintMask & 8) { - pipe->destColorPtr[3] = pipe->cSrc[3]; - } - pipe->destColorPtr += 4; - *pipe->destAlphaPtr++ = 255; - - ++pipe->x; -} -#endif - - -// special case: -// !pipe->pattern && !pipe->noTransparency && !state->softMask && -// pipe->usesShape && !pipe->alpha0Ptr && !state->blendFunc && -// pipe->nonIsolatedGroup == 0 && -// bitmap->mode == splashModeMono1 && !pipe->destAlphaPtr -void Splash::pipeRunAAMono1(SplashPipe *pipe) { - Guchar aSrc; - SplashColor cDest; - Guchar cResult0; - - //----- read destination pixel - cDest[0] = (*pipe->destColorPtr & pipe->destColorMask) ? 0xff : 0x00; - - //----- source alpha - aSrc = div255(pipe->aInput * pipe->shape); - - //----- result color - // note: aDest = alpha2 = aResult = 0xff - cResult0 = (Guchar)div255((0xff - aSrc) * cDest[0] + aSrc * pipe->cSrc[0]); - - //----- write destination pixel - if (state->screen->test(pipe->x, pipe->y, cResult0)) { - *pipe->destColorPtr |= pipe->destColorMask; - } else { - *pipe->destColorPtr &= ~pipe->destColorMask; - } - if (!(pipe->destColorMask >>= 1)) { - pipe->destColorMask = 0x80; - ++pipe->destColorPtr; - } - - ++pipe->x; -} - -// special case: -// !pipe->pattern && !pipe->noTransparency && !state->softMask && -// pipe->usesShape && !pipe->alpha0Ptr && !state->blendFunc && -// pipe->nonIsolatedGroup == 0 && -// bitmap->mode == splashModeMono8 && pipe->destAlphaPtr -void Splash::pipeRunAAMono8(SplashPipe *pipe) { - Guchar aSrc, aDest, alpha2, aResult; - SplashColor cDest; - Guchar cResult0; - - //----- read destination pixel - cDest[0] = *pipe->destColorPtr; - aDest = *pipe->destAlphaPtr; - - //----- source alpha - aSrc = div255(pipe->aInput * pipe->shape); - - //----- result alpha and non-isolated group element correction - aResult = aSrc + aDest - div255(aSrc * aDest); - alpha2 = aResult; - - //----- result color - if (alpha2 == 0) { - cResult0 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - } - - //----- write destination pixel - *pipe->destColorPtr++ = cResult0; - *pipe->destAlphaPtr++ = aResult; - - ++pipe->x; -} - -// special case: -// !pipe->pattern && !pipe->noTransparency && !state->softMask && -// pipe->usesShape && !pipe->alpha0Ptr && !state->blendFunc && -// pipe->nonIsolatedGroup == 0 && -// bitmap->mode == splashModeRGB8 && pipe->destAlphaPtr -void Splash::pipeRunAARGB8(SplashPipe *pipe) { - Guchar aSrc, aDest, alpha2, aResult; - SplashColor cDest; - Guchar cResult0, cResult1, cResult2; - - //----- read destination pixel - cDest[0] = pipe->destColorPtr[0]; - cDest[1] = pipe->destColorPtr[1]; - cDest[2] = pipe->destColorPtr[2]; - aDest = *pipe->destAlphaPtr; - - //----- source alpha - aSrc = div255(pipe->aInput * pipe->shape); - - //----- result alpha and non-isolated group element correction - aResult = aSrc + aDest - div255(aSrc * aDest); - alpha2 = aResult; - - //----- result color - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * pipe->cSrc[1]) / alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * pipe->cSrc[2]) / alpha2); - } - - //----- write destination pixel - *pipe->destColorPtr++ = cResult0; - *pipe->destColorPtr++ = cResult1; - *pipe->destColorPtr++ = cResult2; - *pipe->destAlphaPtr++ = aResult; - - ++pipe->x; -} - -// special case: -// !pipe->pattern && !pipe->noTransparency && !state->softMask && -// pipe->usesShape && !pipe->alpha0Ptr && !state->blendFunc && -// pipe->nonIsolatedGroup == 0 && -// bitmap->mode == splashModeBGR8 && pipe->destAlphaPtr -void Splash::pipeRunAABGR8(SplashPipe *pipe) { - Guchar aSrc, aDest, alpha2, aResult; - SplashColor cDest; - Guchar cResult0, cResult1, cResult2; - - //----- read destination pixel - cDest[0] = pipe->destColorPtr[2]; - cDest[1] = pipe->destColorPtr[1]; - cDest[2] = pipe->destColorPtr[0]; - aDest = *pipe->destAlphaPtr; - - //----- source alpha - aSrc = div255(pipe->aInput * pipe->shape); - - //----- result alpha and non-isolated group element correction - aResult = aSrc + aDest - div255(aSrc * aDest); - alpha2 = aResult; - - //----- result color - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * pipe->cSrc[1]) / alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * pipe->cSrc[2]) / alpha2); - } - - //----- write destination pixel - *pipe->destColorPtr++ = cResult2; - *pipe->destColorPtr++ = cResult1; - *pipe->destColorPtr++ = cResult0; - *pipe->destAlphaPtr++ = aResult; - - ++pipe->x; -} - -#if SPLASH_CMYK -// special case: -// !pipe->pattern && !pipe->noTransparency && !state->softMask && -// pipe->usesShape && !pipe->alpha0Ptr && !state->blendFunc && -// pipe->nonIsolatedGroup == 0 && -// bitmap->mode == splashModeCMYK8 && pipe->destAlphaPtr -void Splash::pipeRunAACMYK8(SplashPipe *pipe) { - Guchar aSrc, aDest, alpha2, aResult; - SplashColor cDest; - Guchar cResult0, cResult1, cResult2, cResult3; - - //----- read destination pixel - cDest[0] = pipe->destColorPtr[0]; - cDest[1] = pipe->destColorPtr[1]; - cDest[2] = pipe->destColorPtr[2]; - cDest[3] = pipe->destColorPtr[3]; - aDest = *pipe->destAlphaPtr; - - //----- source alpha - aSrc = div255(pipe->aInput * pipe->shape); - - //----- result alpha and non-isolated group element correction - aResult = aSrc + aDest - div255(aSrc * aDest); - alpha2 = aResult; - - //----- result color - if (alpha2 == 0) { - cResult0 = 0; - cResult1 = 0; - cResult2 = 0; - cResult3 = 0; - } else { - cResult0 = (Guchar)(((alpha2 - aSrc) * cDest[0] + - aSrc * pipe->cSrc[0]) / alpha2); - cResult1 = (Guchar)(((alpha2 - aSrc) * cDest[1] + - aSrc * pipe->cSrc[1]) / alpha2); - cResult2 = (Guchar)(((alpha2 - aSrc) * cDest[2] + - aSrc * pipe->cSrc[2]) / alpha2); - cResult3 = (Guchar)(((alpha2 - aSrc) * cDest[3] + - aSrc * pipe->cSrc[3]) / alpha2); - } - - //----- write destination pixel - if (state->overprintMask & 1) { - pipe->destColorPtr[0] = cResult0; - } - if (state->overprintMask & 2) { - pipe->destColorPtr[1] = cResult1; - } - if (state->overprintMask & 4) { - pipe->destColorPtr[2] = cResult2; - } - if (state->overprintMask & 8) { - pipe->destColorPtr[3] = cResult3; - } - pipe->destColorPtr += 4; - *pipe->destAlphaPtr++ = aResult; - - ++pipe->x; -} -#endif - - -inline void Splash::pipeSetXY(SplashPipe *pipe, int x, int y) { - pipe->x = x; - pipe->y = y; - if (state->softMask) { - pipe->softMaskPtr = - &state->softMask->data[y * state->softMask->rowSize + x]; - } - switch (bitmap->mode) { - case splashModeMono1: - pipe->destColorPtr = &bitmap->data[y * bitmap->rowSize + (x >> 3)]; - pipe->destColorMask = 0x80 >> (x & 7); - break; - case splashModeMono8: - pipe->destColorPtr = &bitmap->data[y * bitmap->rowSize + x]; - break; - case splashModeRGB8: - case splashModeBGR8: - pipe->destColorPtr = &bitmap->data[y * bitmap->rowSize + 3 * x]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - pipe->destColorPtr = &bitmap->data[y * bitmap->rowSize + 4 * x]; - break; -#endif - } - if (bitmap->alpha) { - pipe->destAlphaPtr = &bitmap->alpha[y * bitmap->width + x]; - } else { - pipe->destAlphaPtr = NULL; - } - if (state->inNonIsolatedGroup && alpha0Bitmap->alpha) { - pipe->alpha0Ptr = - &alpha0Bitmap->alpha[(alpha0Y + y) * alpha0Bitmap->width + - (alpha0X + x)]; - } else { - pipe->alpha0Ptr = NULL; - } -} - -inline void Splash::pipeIncX(SplashPipe *pipe) { - ++pipe->x; - if (state->softMask) { - ++pipe->softMaskPtr; - } - switch (bitmap->mode) { - case splashModeMono1: - if (!(pipe->destColorMask >>= 1)) { - pipe->destColorMask = 0x80; - ++pipe->destColorPtr; - } - break; - case splashModeMono8: - ++pipe->destColorPtr; - break; - case splashModeRGB8: - case splashModeBGR8: - pipe->destColorPtr += 3; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - pipe->destColorPtr += 4; - break; -#endif - } - if (pipe->destAlphaPtr) { - ++pipe->destAlphaPtr; - } - if (pipe->alpha0Ptr) { - ++pipe->alpha0Ptr; - } -} - -inline void Splash::drawPixel(SplashPipe *pipe, int x, int y, GBool noClip) { - if (noClip || state->clip->test(x, y)) { - pipeSetXY(pipe, x, y); - (this->*pipe->run)(pipe); - updateModX(x); - updateModY(y); - } -} - -inline void Splash::drawAAPixelInit() { - aaBufY = -1; -} - -inline void Splash::drawAAPixel(SplashPipe *pipe, int x, int y) { -#if splashAASize == 4 - static int bitCount4[16] = { 0, 1, 1, 2, 1, 2, 2, 3, - 1, 2, 2, 3, 2, 3, 3, 4 }; - int w; -#else - int xx, yy; -#endif - SplashColorPtr p; - int x0, x1, t; - - if (x < 0 || x >= bitmap->width || - y < state->clip->getYMinI() || y > state->clip->getYMaxI()) { - return; - } - - // update aaBuf - if (y != aaBufY) { - memset(aaBuf->getDataPtr(), 0xff, - aaBuf->getRowSize() * aaBuf->getHeight()); - x0 = 0; - x1 = bitmap->width - 1; - state->clip->clipAALine(aaBuf, &x0, &x1, y); - aaBufY = y; - } - - // compute the shape value -#if splashAASize == 4 - p = aaBuf->getDataPtr() + (x >> 1); - w = aaBuf->getRowSize(); - if (x & 1) { - t = bitCount4[*p & 0x0f] + bitCount4[p[w] & 0x0f] + - bitCount4[p[2*w] & 0x0f] + bitCount4[p[3*w] & 0x0f]; - } else { - t = bitCount4[*p >> 4] + bitCount4[p[w] >> 4] + - bitCount4[p[2*w] >> 4] + bitCount4[p[3*w] >> 4]; - } -#else - t = 0; - for (yy = 0; yy < splashAASize; ++yy) { - for (xx = 0; xx < splashAASize; ++xx) { - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + - ((x * splashAASize + xx) >> 3); - t += (*p >> (7 - ((x * splashAASize + xx) & 7))) & 1; - } - } -#endif - - // draw the pixel - if (t != 0) { - pipeSetXY(pipe, x, y); - pipe->shape = div255(aaGamma[t] * pipe->shape); - (this->*pipe->run)(pipe); - updateModX(x); - updateModY(y); - } -} - -inline void Splash::drawSpan(SplashPipe *pipe, int x0, int x1, int y, - GBool noClip) { - int x; - - pipeSetXY(pipe, x0, y); - if (noClip) { - for (x = x0; x <= x1; ++x) { - (this->*pipe->run)(pipe); - } - updateModX(x0); - updateModX(x1); - updateModY(y); - } else { - for (x = x0; x <= x1; ++x) { - if (state->clip->test(x, y)) { - (this->*pipe->run)(pipe); - updateModX(x); - updateModY(y); - } else { - pipeIncX(pipe); - } - } - } -} - -inline void Splash::drawAALine(SplashPipe *pipe, int x0, int x1, int y) { -#if splashAASize == 4 - static int bitCount4[16] = { 0, 1, 1, 2, 1, 2, 2, 3, - 1, 2, 2, 3, 2, 3, 3, 4 }; - SplashColorPtr p0, p1, p2, p3; - int t; -#else - SplashColorPtr p; - int xx, yy, t; -#endif - int x; - -#if splashAASize == 4 - p0 = aaBuf->getDataPtr() + (x0 >> 1); - p1 = p0 + aaBuf->getRowSize(); - p2 = p1 + aaBuf->getRowSize(); - p3 = p2 + aaBuf->getRowSize(); -#endif - pipeSetXY(pipe, x0, y); - for (x = x0; x <= x1; ++x) { - - // compute the shape value -#if splashAASize == 4 - if (x & 1) { - t = bitCount4[*p0 & 0x0f] + bitCount4[*p1 & 0x0f] + - bitCount4[*p2 & 0x0f] + bitCount4[*p3 & 0x0f]; - ++p0; ++p1; ++p2; ++p3; - } else { - t = bitCount4[*p0 >> 4] + bitCount4[*p1 >> 4] + - bitCount4[*p2 >> 4] + bitCount4[*p3 >> 4]; - } -#else - t = 0; - for (yy = 0; yy < splashAASize; ++yy) { - for (xx = 0; xx < splashAASize; ++xx) { - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + - ((x * splashAASize + xx) >> 3); - t += (*p >> (7 - ((x * splashAASize + xx) & 7))) & 1; - } - } -#endif - - if (t != 0) { - pipe->shape = aaGamma[t]; - (this->*pipe->run)(pipe); - updateModX(x); - updateModY(y); - } else { - pipeIncX(pipe); - } - } -} - -//------------------------------------------------------------------------ - -// Transform a point from user space to device space. -inline void Splash::transform(SplashCoord *matrix, - SplashCoord xi, SplashCoord yi, - SplashCoord *xo, SplashCoord *yo) { - // [ m[0] m[1] 0 ] - // [xo yo 1] = [xi yi 1] * [ m[2] m[3] 0 ] - // [ m[4] m[5] 1 ] - *xo = xi * matrix[0] + yi * matrix[2] + matrix[4]; - *yo = xi * matrix[1] + yi * matrix[3] + matrix[5]; -} - -//------------------------------------------------------------------------ -// Splash -//------------------------------------------------------------------------ - -Splash::Splash(SplashBitmap *bitmapA, GBool vectorAntialiasA, - SplashScreenParams *screenParams) { - int i; - - bitmap = bitmapA; - vectorAntialias = vectorAntialiasA; - inShading = gFalse; - state = new SplashState(bitmap->width, bitmap->height, vectorAntialias, - screenParams); - if (vectorAntialias) { - aaBuf = new SplashBitmap(splashAASize * bitmap->width, splashAASize, - 1, splashModeMono1, gFalse); - for (i = 0; i <= splashAASize * splashAASize; ++i) { - aaGamma[i] = (Guchar)splashRound( - splashPow((SplashCoord)i / - (SplashCoord)(splashAASize * splashAASize), - splashAAGamma) * 255); - } - } else { - aaBuf = NULL; - } - clearModRegion(); - debugMode = gFalse; -} - -Splash::Splash(SplashBitmap *bitmapA, GBool vectorAntialiasA, - SplashScreen *screenA) { - int i; - - bitmap = bitmapA; - vectorAntialias = vectorAntialiasA; - inShading = gFalse; - state = new SplashState(bitmap->width, bitmap->height, vectorAntialias, - screenA); - if (vectorAntialias) { - aaBuf = new SplashBitmap(splashAASize * bitmap->width, splashAASize, - 1, splashModeMono1, gFalse); - for (i = 0; i <= splashAASize * splashAASize; ++i) { - aaGamma[i] = (Guchar)splashRound( - splashPow((SplashCoord)i / - (SplashCoord)(splashAASize * splashAASize), - splashAAGamma) * 255); - } - } else { - aaBuf = NULL; - } - clearModRegion(); - debugMode = gFalse; -} - -Splash::~Splash() { - while (state->next) { - restoreState(); - } - delete state; - if (vectorAntialias) { - delete aaBuf; - } -} - -//------------------------------------------------------------------------ -// state read -//------------------------------------------------------------------------ - -SplashCoord *Splash::getMatrix() { - return state->matrix; -} - -SplashPattern *Splash::getStrokePattern() { - return state->strokePattern; -} - -SplashPattern *Splash::getFillPattern() { - return state->fillPattern; -} - -SplashScreen *Splash::getScreen() { - return state->screen; -} - -SplashBlendFunc Splash::getBlendFunc() { - return state->blendFunc; -} - -SplashCoord Splash::getStrokeAlpha() { - return state->strokeAlpha; -} - -SplashCoord Splash::getFillAlpha() { - return state->fillAlpha; -} - -SplashCoord Splash::getLineWidth() { - return state->lineWidth; -} - -int Splash::getLineCap() { - return state->lineCap; -} - -int Splash::getLineJoin() { - return state->lineJoin; -} - -SplashCoord Splash::getMiterLimit() { - return state->miterLimit; -} - -SplashCoord Splash::getFlatness() { - return state->flatness; -} - -SplashCoord *Splash::getLineDash() { - return state->lineDash; -} - -int Splash::getLineDashLength() { - return state->lineDashLength; -} - -SplashCoord Splash::getLineDashPhase() { - return state->lineDashPhase; -} - -GBool Splash::getStrokeAdjust() { - return state->strokeAdjust; -} - -SplashClip *Splash::getClip() { - return state->clip; -} - -SplashBitmap *Splash::getSoftMask() { - return state->softMask; -} - -GBool Splash::getInNonIsolatedGroup() { - return state->inNonIsolatedGroup; -} - -//------------------------------------------------------------------------ -// state write -//------------------------------------------------------------------------ - -void Splash::setMatrix(SplashCoord *matrix) { - memcpy(state->matrix, matrix, 6 * sizeof(SplashCoord)); -} - -void Splash::setStrokePattern(SplashPattern *strokePattern) { - state->setStrokePattern(strokePattern); -} - -void Splash::setFillPattern(SplashPattern *fillPattern) { - state->setFillPattern(fillPattern); -} - -void Splash::setScreen(SplashScreen *screen) { - state->setScreen(screen); -} - -void Splash::setBlendFunc(SplashBlendFunc func) { - state->blendFunc = func; -} - -void Splash::setStrokeAlpha(SplashCoord alpha) { - state->strokeAlpha = alpha; -} - -void Splash::setFillAlpha(SplashCoord alpha) { - state->fillAlpha = alpha; -} - -void Splash::setLineWidth(SplashCoord lineWidth) { - state->lineWidth = lineWidth; -} - -void Splash::setLineCap(int lineCap) { - state->lineCap = lineCap; -} - -void Splash::setLineJoin(int lineJoin) { - state->lineJoin = lineJoin; -} - -void Splash::setMiterLimit(SplashCoord miterLimit) { - state->miterLimit = miterLimit; -} - -void Splash::setFlatness(SplashCoord flatness) { - if (flatness < 1) { - state->flatness = 1; - } else { - state->flatness = flatness; - } -} - -void Splash::setLineDash(SplashCoord *lineDash, int lineDashLength, - SplashCoord lineDashPhase) { - state->setLineDash(lineDash, lineDashLength, lineDashPhase); -} - -void Splash::setStrokeAdjust(GBool strokeAdjust) { - state->strokeAdjust = strokeAdjust; -} - -void Splash::clipResetToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1) { - state->clip->resetToRect(x0, y0, x1, y1); -} - -SplashError Splash::clipToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1) { - return state->clip->clipToRect(x0, y0, x1, y1); -} - -SplashError Splash::clipToPath(SplashPath *path, GBool eo) { - return state->clip->clipToPath(path, state->matrix, state->flatness, eo); -} - -void Splash::setSoftMask(SplashBitmap *softMask) { - state->setSoftMask(softMask); -} - -void Splash::setInNonIsolatedGroup(SplashBitmap *alpha0BitmapA, - int alpha0XA, int alpha0YA) { - alpha0Bitmap = alpha0BitmapA; - alpha0X = alpha0XA; - alpha0Y = alpha0YA; - state->inNonIsolatedGroup = gTrue; -} - -void Splash::setOverprintMask(Guint overprintMask) { - state->overprintMask = overprintMask; -} - -//------------------------------------------------------------------------ -// state save/restore -//------------------------------------------------------------------------ - -void Splash::saveState() { - SplashState *newState; - - newState = state->copy(); - newState->next = state; - state = newState; -} - -SplashError Splash::restoreState() { - SplashState *oldState; - - if (!state->next) { - return splashErrNoSave; - } - oldState = state; - state = state->next; - delete oldState; - return splashOk; -} - -//------------------------------------------------------------------------ -// drawing operations -//------------------------------------------------------------------------ - -void Splash::clear(SplashColorPtr color, Guchar alpha) { - SplashColorPtr row, p; - Guchar mono; - int x, y; - - switch (bitmap->mode) { - case splashModeMono1: - mono = (color[0] & 0x80) ? 0xff : 0x00; - if (bitmap->rowSize < 0) { - memset(bitmap->data + bitmap->rowSize * (bitmap->height - 1), - mono, -bitmap->rowSize * bitmap->height); - } else { - memset(bitmap->data, mono, bitmap->rowSize * bitmap->height); - } - break; - case splashModeMono8: - if (bitmap->rowSize < 0) { - memset(bitmap->data + bitmap->rowSize * (bitmap->height - 1), - color[0], -bitmap->rowSize * bitmap->height); - } else { - memset(bitmap->data, color[0], bitmap->rowSize * bitmap->height); - } - break; - case splashModeRGB8: - if (color[0] == color[1] && color[1] == color[2]) { - if (bitmap->rowSize < 0) { - memset(bitmap->data + bitmap->rowSize * (bitmap->height - 1), - color[0], -bitmap->rowSize * bitmap->height); - } else { - memset(bitmap->data, color[0], bitmap->rowSize * bitmap->height); - } - } else { - row = bitmap->data; - for (y = 0; y < bitmap->height; ++y) { - p = row; - for (x = 0; x < bitmap->width; ++x) { - *p++ = color[2]; - *p++ = color[1]; - *p++ = color[0]; - } - row += bitmap->rowSize; - } - } - break; - case splashModeBGR8: - if (color[0] == color[1] && color[1] == color[2]) { - if (bitmap->rowSize < 0) { - memset(bitmap->data + bitmap->rowSize * (bitmap->height - 1), - color[0], -bitmap->rowSize * bitmap->height); - } else { - memset(bitmap->data, color[0], bitmap->rowSize * bitmap->height); - } - } else { - row = bitmap->data; - for (y = 0; y < bitmap->height; ++y) { - p = row; - for (x = 0; x < bitmap->width; ++x) { - *p++ = color[0]; - *p++ = color[1]; - *p++ = color[2]; - } - row += bitmap->rowSize; - } - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - if (color[0] == color[1] && color[1] == color[2] && color[2] == color[3]) { - if (bitmap->rowSize < 0) { - memset(bitmap->data + bitmap->rowSize * (bitmap->height - 1), - color[0], -bitmap->rowSize * bitmap->height); - } else { - memset(bitmap->data, color[0], bitmap->rowSize * bitmap->height); - } - } else { - row = bitmap->data; - for (y = 0; y < bitmap->height; ++y) { - p = row; - for (x = 0; x < bitmap->width; ++x) { - *p++ = color[0]; - *p++ = color[1]; - *p++ = color[2]; - *p++ = color[3]; - } - row += bitmap->rowSize; - } - } - break; -#endif - } - - if (bitmap->alpha) { - memset(bitmap->alpha, alpha, bitmap->width * bitmap->height); - } - - updateModX(0); - updateModY(0); - updateModX(bitmap->width - 1); - updateModY(bitmap->height - 1); -} - -SplashError Splash::stroke(SplashPath *path) { - SplashPath *path2, *dPath; - - if (debugMode) { - printf("stroke [dash:%d] [width:%.2f]:\n", - state->lineDashLength, (double)state->lineWidth); - dumpPath(path); - } - opClipRes = splashClipAllOutside; - if (path->length == 0) { - return splashErrEmptyPath; - } - path2 = flattenPath(path, state->matrix, state->flatness); - if (state->lineDashLength > 0) { - dPath = makeDashedPath(path2); - delete path2; - path2 = dPath; - } - if (state->lineWidth == 0) { - strokeNarrow(path2); - } else { - strokeWide(path2); - } - delete path2; - return splashOk; -} - -void Splash::strokeNarrow(SplashPath *path) { - SplashPipe pipe; - SplashXPath *xPath; - SplashXPathSeg *seg; - int x0, x1, x2, x3, y0, y1, x, y, t; - SplashCoord dx, dy, dxdy; - SplashClipResult clipRes; - int nClipRes[3]; - int i; - - nClipRes[0] = nClipRes[1] = nClipRes[2] = 0; - - xPath = new SplashXPath(path, state->matrix, state->flatness, gFalse); - - pipeInit(&pipe, 0, 0, state->strokePattern, NULL, - (Guchar)splashRound(state->strokeAlpha * 255), - gFalse, gFalse); - - for (i = 0, seg = xPath->segs; i < xPath->length; ++i, ++seg) { - - x0 = splashFloor(seg->x0); - x1 = splashFloor(seg->x1); - y0 = splashFloor(seg->y0); - y1 = splashFloor(seg->y1); - - // horizontal segment - if (y0 == y1) { - if (x0 > x1) { - t = x0; x0 = x1; x1 = t; - } - if ((clipRes = state->clip->testSpan(x0, x1, y0)) - != splashClipAllOutside) { - drawSpan(&pipe, x0, x1, y0, clipRes == splashClipAllInside); - } - - // segment with |dx| > |dy| - } else if (splashAbs(seg->dxdy) > 1) { - dx = seg->x1 - seg->x0; - dy = seg->y1 - seg->y0; - dxdy = seg->dxdy; - if (y0 > y1) { - t = y0; y0 = y1; y1 = t; - t = x0; x0 = x1; x1 = t; - dx = -dx; - dy = -dy; - } - if ((clipRes = state->clip->testRect(x0 <= x1 ? x0 : x1, y0, - x0 <= x1 ? x1 : x0, y1)) - != splashClipAllOutside) { - if (dx > 0) { - x2 = x0; - x3 = splashFloor(seg->x0 + ((SplashCoord)y0 + 1 - seg->y0) * dxdy); - drawSpan(&pipe, x2, (x2 <= x3 - 1) ? x3 - 1 : x2, y0, - clipRes == splashClipAllInside); - x2 = x3; - for (y = y0 + 1; y <= y1 - 1; ++y) { - x3 = splashFloor(seg->x0 + ((SplashCoord)y + 1 - seg->y0) * dxdy); - drawSpan(&pipe, x2, x3 - 1, y, clipRes == splashClipAllInside); - x2 = x3; - } - drawSpan(&pipe, x2, x2 <= x1 ? x1 : x2, y1, - clipRes == splashClipAllInside); - } else { - x2 = x0; - x3 = splashFloor(seg->x0 + ((SplashCoord)y0 + 1 - seg->y0) * dxdy); - drawSpan(&pipe, (x3 + 1 <= x2) ? x3 + 1 : x2, x2, y0, - clipRes == splashClipAllInside); - x2 = x3; - for (y = y0 + 1; y <= y1 - 1; ++y) { - x3 = splashFloor(seg->x0 + ((SplashCoord)y + 1 - seg->y0) * dxdy); - drawSpan(&pipe, x3 + 1, x2, y, clipRes == splashClipAllInside); - x2 = x3; - } - drawSpan(&pipe, x1, (x1 <= x2) ? x2 : x1, y1, - clipRes == splashClipAllInside); - } - } - - // segment with |dy| > |dx| - } else { - dxdy = seg->dxdy; - if (y0 > y1) { - t = x0; x0 = x1; x1 = t; - t = y0; y0 = y1; y1 = t; - } - if ((clipRes = state->clip->testRect(x0 <= x1 ? x0 : x1, y0, - x0 <= x1 ? x1 : x0, y1)) - != splashClipAllOutside) { - drawPixel(&pipe, x0, y0, clipRes == splashClipAllInside); - for (y = y0 + 1; y <= y1 - 1; ++y) { - x = splashFloor(seg->x0 + ((SplashCoord)y - seg->y0) * dxdy); - drawPixel(&pipe, x, y, clipRes == splashClipAllInside); - } - drawPixel(&pipe, x1, y1, clipRes == splashClipAllInside); - } - } - ++nClipRes[clipRes]; - } - if (nClipRes[splashClipPartial] || - (nClipRes[splashClipAllInside] && nClipRes[splashClipAllOutside])) { - opClipRes = splashClipPartial; - } else if (nClipRes[splashClipAllInside]) { - opClipRes = splashClipAllInside; - } else { - opClipRes = splashClipAllOutside; - } - - delete xPath; -} - -void Splash::strokeWide(SplashPath *path) { - SplashPath *path2; - - path2 = makeStrokePath(path, gFalse); - fillWithPattern(path2, gFalse, state->strokePattern, state->strokeAlpha); - delete path2; -} - -SplashPath *Splash::flattenPath(SplashPath *path, SplashCoord *matrix, - SplashCoord flatness) { - SplashPath *fPath; - SplashCoord flatness2; - Guchar flag; - int i; - - fPath = new SplashPath(); - flatness2 = flatness * flatness; - i = 0; - while (i < path->length) { - flag = path->flags[i]; - if (flag & splashPathFirst) { - fPath->moveTo(path->pts[i].x, path->pts[i].y); - ++i; - } else { - if (flag & splashPathCurve) { - flattenCurve(path->pts[i-1].x, path->pts[i-1].y, - path->pts[i ].x, path->pts[i ].y, - path->pts[i+1].x, path->pts[i+1].y, - path->pts[i+2].x, path->pts[i+2].y, - matrix, flatness2, fPath); - i += 3; - } else { - fPath->lineTo(path->pts[i].x, path->pts[i].y); - ++i; - } - if (path->flags[i-1] & splashPathClosed) { - fPath->close(); - } - } - } - return fPath; -} - -void Splash::flattenCurve(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - SplashCoord x2, SplashCoord y2, - SplashCoord x3, SplashCoord y3, - SplashCoord *matrix, SplashCoord flatness2, - SplashPath *fPath) { - SplashCoord cx[splashMaxCurveSplits + 1][3]; - SplashCoord cy[splashMaxCurveSplits + 1][3]; - int cNext[splashMaxCurveSplits + 1]; - SplashCoord xl0, xl1, xl2, xr0, xr1, xr2, xr3, xx1, xx2, xh; - SplashCoord yl0, yl1, yl2, yr0, yr1, yr2, yr3, yy1, yy2, yh; - SplashCoord dx, dy, mx, my, tx, ty, d1, d2; - int p1, p2, p3; - - // initial segment - p1 = 0; - p2 = splashMaxCurveSplits; - cx[p1][0] = x0; cy[p1][0] = y0; - cx[p1][1] = x1; cy[p1][1] = y1; - cx[p1][2] = x2; cy[p1][2] = y2; - cx[p2][0] = x3; cy[p2][0] = y3; - cNext[p1] = p2; - - while (p1 < splashMaxCurveSplits) { - - // get the next segment - xl0 = cx[p1][0]; yl0 = cy[p1][0]; - xx1 = cx[p1][1]; yy1 = cy[p1][1]; - xx2 = cx[p1][2]; yy2 = cy[p1][2]; - p2 = cNext[p1]; - xr3 = cx[p2][0]; yr3 = cy[p2][0]; - - // compute the distances (in device space) from the control points - // to the midpoint of the straight line (this is a bit of a hack, - // but it's much faster than computing the actual distances to the - // line) - transform(matrix, (xl0 + xr3) * 0.5, (yl0 + yr3) * 0.5, &mx, &my); - transform(matrix, xx1, yy1, &tx, &ty); - dx = tx - mx; - dy = ty - my; - d1 = dx*dx + dy*dy; - transform(matrix, xx2, yy2, &tx, &ty); - dx = tx - mx; - dy = ty - my; - d2 = dx*dx + dy*dy; - - // if the curve is flat enough, or no more subdivisions are - // allowed, add the straight line segment - if (p2 - p1 == 1 || (d1 <= flatness2 && d2 <= flatness2)) { - fPath->lineTo(xr3, yr3); - p1 = p2; - - // otherwise, subdivide the curve - } else { - xl1 = (xl0 + xx1) * 0.5; - yl1 = (yl0 + yy1) * 0.5; - xh = (xx1 + xx2) * 0.5; - yh = (yy1 + yy2) * 0.5; - xl2 = (xl1 + xh) * 0.5; - yl2 = (yl1 + yh) * 0.5; - xr2 = (xx2 + xr3) * 0.5; - yr2 = (yy2 + yr3) * 0.5; - xr1 = (xh + xr2) * 0.5; - yr1 = (yh + yr2) * 0.5; - xr0 = (xl2 + xr1) * 0.5; - yr0 = (yl2 + yr1) * 0.5; - // add the new subdivision points - p3 = (p1 + p2) / 2; - cx[p1][1] = xl1; cy[p1][1] = yl1; - cx[p1][2] = xl2; cy[p1][2] = yl2; - cNext[p1] = p3; - cx[p3][0] = xr0; cy[p3][0] = yr0; - cx[p3][1] = xr1; cy[p3][1] = yr1; - cx[p3][2] = xr2; cy[p3][2] = yr2; - cNext[p3] = p2; - } - } -} - -SplashPath *Splash::makeDashedPath(SplashPath *path) { - SplashPath *dPath; - SplashCoord lineDashTotal; - SplashCoord lineDashStartPhase, lineDashDist, segLen; - SplashCoord x0, y0, x1, y1, xa, ya; - GBool lineDashStartOn, lineDashOn, newPath; - int lineDashStartIdx, lineDashIdx; - int i, j, k; - - lineDashTotal = 0; - for (i = 0; i < state->lineDashLength; ++i) { - lineDashTotal += state->lineDash[i]; - } - lineDashStartPhase = state->lineDashPhase; - i = splashFloor(lineDashStartPhase / lineDashTotal); - lineDashStartPhase -= (SplashCoord)i * lineDashTotal; - lineDashStartOn = gTrue; - lineDashStartIdx = 0; - if (lineDashStartPhase > 0) { - while (lineDashStartPhase >= state->lineDash[lineDashStartIdx]) { - lineDashStartOn = !lineDashStartOn; - lineDashStartPhase -= state->lineDash[lineDashStartIdx]; - ++lineDashStartIdx; - } - } - - dPath = new SplashPath(); - - // process each subpath - i = 0; - while (i < path->length) { - - // find the end of the subpath - for (j = i; - j < path->length - 1 && !(path->flags[j] & splashPathLast); - ++j) ; - - // initialize the dash parameters - lineDashOn = lineDashStartOn; - lineDashIdx = lineDashStartIdx; - lineDashDist = state->lineDash[lineDashIdx] - lineDashStartPhase; - - // process each segment of the subpath - newPath = gTrue; - for (k = i; k < j; ++k) { - - // grab the segment - x0 = path->pts[k].x; - y0 = path->pts[k].y; - x1 = path->pts[k+1].x; - y1 = path->pts[k+1].y; - segLen = splashDist(x0, y0, x1, y1); - - // process the segment - while (segLen > 0) { - - if (lineDashDist >= segLen) { - if (lineDashOn) { - if (newPath) { - dPath->moveTo(x0, y0); - newPath = gFalse; - } - dPath->lineTo(x1, y1); - } - lineDashDist -= segLen; - segLen = 0; - - } else { - xa = x0 + (lineDashDist / segLen) * (x1 - x0); - ya = y0 + (lineDashDist / segLen) * (y1 - y0); - if (lineDashOn) { - if (newPath) { - dPath->moveTo(x0, y0); - newPath = gFalse; - } - dPath->lineTo(xa, ya); - } - x0 = xa; - y0 = ya; - segLen -= lineDashDist; - lineDashDist = 0; - } - - // get the next entry in the dash array - if (lineDashDist <= 0) { - lineDashOn = !lineDashOn; - if (++lineDashIdx == state->lineDashLength) { - lineDashIdx = 0; - } - lineDashDist = state->lineDash[lineDashIdx]; - newPath = gTrue; - } - } - } - i = j + 1; - } - - return dPath; -} - -SplashError Splash::fill(SplashPath *path, GBool eo) { - if (debugMode) { - printf("fill [eo:%d]:\n", eo); - dumpPath(path); - } - return fillWithPattern(path, eo, state->fillPattern, state->fillAlpha); -} - -SplashError Splash::fillWithPattern(SplashPath *path, GBool eo, - SplashPattern *pattern, - SplashCoord alpha) { - SplashPipe pipe; - SplashXPath *xPath; - SplashXPathScanner *scanner; - int xMinI, yMinI, xMaxI, yMaxI, x0, x1, y; - SplashClipResult clipRes, clipRes2; - - if (path->length == 0) { - return splashErrEmptyPath; - } - if (pathAllOutside(path)) { - opClipRes = splashClipAllOutside; - return splashOk; - } - xPath = new SplashXPath(path, state->matrix, state->flatness, gTrue); - if (vectorAntialias && !inShading) { - xPath->aaScale(); - } - xPath->sort(); - yMinI = state->clip->getYMinI(); - yMaxI = state->clip->getYMaxI(); - if (vectorAntialias && !inShading) { - yMinI = yMinI * splashAASize; - yMaxI = (yMaxI + 1) * splashAASize - 1; - } - scanner = new SplashXPathScanner(xPath, eo, yMinI, yMaxI); - - // get the min and max x and y values - if (vectorAntialias && !inShading) { - scanner->getBBoxAA(&xMinI, &yMinI, &xMaxI, &yMaxI); - } else { - scanner->getBBox(&xMinI, &yMinI, &xMaxI, &yMaxI); - } - - // check clipping - if ((clipRes = state->clip->testRect(xMinI, yMinI, xMaxI, yMaxI)) - != splashClipAllOutside) { - if (scanner->hasPartialClip()) { - clipRes = splashClipPartial; - } - - pipeInit(&pipe, 0, yMinI, pattern, NULL, (Guchar)splashRound(alpha * 255), - vectorAntialias && !inShading, gFalse); - - // draw the spans - if (vectorAntialias && !inShading) { - for (y = yMinI; y <= yMaxI; ++y) { - scanner->renderAALine(aaBuf, &x0, &x1, y); - if (clipRes != splashClipAllInside) { - state->clip->clipAALine(aaBuf, &x0, &x1, y); - } - drawAALine(&pipe, x0, x1, y); - } - } else { - for (y = yMinI; y <= yMaxI; ++y) { - while (scanner->getNextSpan(y, &x0, &x1)) { - if (clipRes == splashClipAllInside) { - drawSpan(&pipe, x0, x1, y, gTrue); - } else { - // limit the x range - if (x0 < state->clip->getXMinI()) { - x0 = state->clip->getXMinI(); - } - if (x1 > state->clip->getXMaxI()) { - x1 = state->clip->getXMaxI(); - } - clipRes2 = state->clip->testSpan(x0, x1, y); - drawSpan(&pipe, x0, x1, y, clipRes2 == splashClipAllInside); - } - } - } - } - } - opClipRes = clipRes; - - delete scanner; - delete xPath; - return splashOk; -} - -GBool Splash::pathAllOutside(SplashPath *path) { - SplashCoord xMin1, yMin1, xMax1, yMax1; - SplashCoord xMin2, yMin2, xMax2, yMax2; - SplashCoord x, y; - int xMinI, yMinI, xMaxI, yMaxI; - int i; - - xMin1 = xMax1 = path->pts[0].x; - yMin1 = yMax1 = path->pts[0].y; - for (i = 1; i < path->length; ++i) { - if (path->pts[i].x < xMin1) { - xMin1 = path->pts[i].x; - } else if (path->pts[i].x > xMax1) { - xMax1 = path->pts[i].x; - } - if (path->pts[i].y < yMin1) { - yMin1 = path->pts[i].y; - } else if (path->pts[i].y > yMax1) { - yMax1 = path->pts[i].y; - } - } - - transform(state->matrix, xMin1, yMin1, &x, &y); - xMin2 = xMax2 = x; - yMin2 = yMax2 = y; - transform(state->matrix, xMin1, yMax1, &x, &y); - if (x < xMin2) { - xMin2 = x; - } else if (x > xMax2) { - xMax2 = x; - } - if (y < yMin2) { - yMin2 = y; - } else if (y > yMax2) { - yMax2 = y; - } - transform(state->matrix, xMax1, yMin1, &x, &y); - if (x < xMin2) { - xMin2 = x; - } else if (x > xMax2) { - xMax2 = x; - } - if (y < yMin2) { - yMin2 = y; - } else if (y > yMax2) { - yMax2 = y; - } - transform(state->matrix, xMax1, yMax1, &x, &y); - if (x < xMin2) { - xMin2 = x; - } else if (x > xMax2) { - xMax2 = x; - } - if (y < yMin2) { - yMin2 = y; - } else if (y > yMax2) { - yMax2 = y; - } - xMinI = splashFloor(xMin2); - yMinI = splashFloor(yMin2); - xMaxI = splashFloor(xMax2); - yMaxI = splashFloor(yMax2); - - return state->clip->testRect(xMinI, yMinI, xMaxI, yMaxI) == - splashClipAllOutside; -} - -SplashError Splash::xorFill(SplashPath *path, GBool eo) { - SplashPipe pipe; - SplashXPath *xPath; - SplashXPathScanner *scanner; - int xMinI, yMinI, xMaxI, yMaxI, x0, x1, y; - SplashClipResult clipRes, clipRes2; - SplashBlendFunc origBlendFunc; - - if (path->length == 0) { - return splashErrEmptyPath; - } - xPath = new SplashXPath(path, state->matrix, state->flatness, gTrue); - xPath->sort(); - scanner = new SplashXPathScanner(xPath, eo, state->clip->getYMinI(), - state->clip->getYMaxI()); - - // get the min and max x and y values - scanner->getBBox(&xMinI, &yMinI, &xMaxI, &yMaxI); - - // check clipping - if ((clipRes = state->clip->testRect(xMinI, yMinI, xMaxI, yMaxI)) - != splashClipAllOutside) { - if (scanner->hasPartialClip()) { - clipRes = splashClipPartial; - } - - origBlendFunc = state->blendFunc; - state->blendFunc = &blendXor; - pipeInit(&pipe, 0, yMinI, state->fillPattern, NULL, 255, gFalse, gFalse); - - // draw the spans - for (y = yMinI; y <= yMaxI; ++y) { - while (scanner->getNextSpan(y, &x0, &x1)) { - if (clipRes == splashClipAllInside) { - drawSpan(&pipe, x0, x1, y, gTrue); - } else { - // limit the x range - if (x0 < state->clip->getXMinI()) { - x0 = state->clip->getXMinI(); - } - if (x1 > state->clip->getXMaxI()) { - x1 = state->clip->getXMaxI(); - } - clipRes2 = state->clip->testSpan(x0, x1, y); - drawSpan(&pipe, x0, x1, y, clipRes2 == splashClipAllInside); - } - } - } - state->blendFunc = origBlendFunc; - } - opClipRes = clipRes; - - delete scanner; - delete xPath; - return splashOk; -} - -SplashError Splash::fillChar(SplashCoord x, SplashCoord y, - int c, SplashFont *font) { - SplashGlyphBitmap glyph; - SplashCoord xt, yt; - int x0, y0, xFrac, yFrac; - SplashError err; - - if (debugMode) { - printf("fillChar: x=%.2f y=%.2f c=%3d=0x%02x='%c'\n", - (double)x, (double)y, c, c, c); - } - transform(state->matrix, x, y, &xt, &yt); - x0 = splashFloor(xt); - xFrac = splashFloor((xt - x0) * splashFontFraction); - y0 = splashFloor(yt); - yFrac = splashFloor((yt - y0) * splashFontFraction); - if (!font->getGlyph(c, xFrac, yFrac, &glyph)) { - return splashErrNoGlyph; - } - err = fillGlyph2(x0, y0, &glyph); - if (glyph.freeData) { - gfree(glyph.data); - } - return err; -} - -SplashError Splash::fillGlyph(SplashCoord x, SplashCoord y, - SplashGlyphBitmap *glyph) { - SplashCoord xt, yt; - int x0, y0; - - transform(state->matrix, x, y, &xt, &yt); - x0 = splashFloor(xt); - y0 = splashFloor(yt); - return fillGlyph2(x0, y0, glyph); -} - -SplashError Splash::fillGlyph2(int x0, int y0, SplashGlyphBitmap *glyph) { - SplashPipe pipe; - SplashClipResult clipRes; - GBool noClip; - int alpha0; - Guchar alpha; - Guchar *p; - int x1, y1, xx, xx1, yy; - - if ((clipRes = state->clip->testRect(x0 - glyph->x, - y0 - glyph->y, - x0 - glyph->x + glyph->w - 1, - y0 - glyph->y + glyph->h - 1)) - != splashClipAllOutside) { - noClip = clipRes == splashClipAllInside; - - if (noClip) { - if (glyph->aa) { - pipeInit(&pipe, x0 - glyph->x, y0 - glyph->y, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, gFalse); - p = glyph->data; - for (yy = 0, y1 = y0 - glyph->y; yy < glyph->h; ++yy, ++y1) { - pipeSetXY(&pipe, x0 - glyph->x, y1); - for (xx = 0, x1 = x0 - glyph->x; xx < glyph->w; ++xx, ++x1) { - alpha = *p++; - if (alpha != 0) { - pipe.shape = alpha; - (this->*pipe.run)(&pipe); - updateModX(x1); - updateModY(y1); - } else { - pipeIncX(&pipe); - } - } - } - } else { - pipeInit(&pipe, x0 - glyph->x, y0 - glyph->y, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gFalse, gFalse); - p = glyph->data; - for (yy = 0, y1 = y0 - glyph->y; yy < glyph->h; ++yy, ++y1) { - pipeSetXY(&pipe, x0 - glyph->x, y1); - for (xx = 0, x1 = x0 - glyph->x; xx < glyph->w; xx += 8) { - alpha0 = *p++; - for (xx1 = 0; xx1 < 8 && xx + xx1 < glyph->w; ++xx1, ++x1) { - if (alpha0 & 0x80) { - (this->*pipe.run)(&pipe); - updateModX(x1); - updateModY(y1); - } else { - pipeIncX(&pipe); - } - alpha0 <<= 1; - } - } - } - } - } else { - if (glyph->aa) { - pipeInit(&pipe, x0 - glyph->x, y0 - glyph->y, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, gFalse); - p = glyph->data; - for (yy = 0, y1 = y0 - glyph->y; yy < glyph->h; ++yy, ++y1) { - pipeSetXY(&pipe, x0 - glyph->x, y1); - for (xx = 0, x1 = x0 - glyph->x; xx < glyph->w; ++xx, ++x1) { - if (state->clip->test(x1, y1)) { - alpha = *p++; - if (alpha != 0) { - pipe.shape = alpha; - (this->*pipe.run)(&pipe); - updateModX(x1); - updateModY(y1); - } else { - pipeIncX(&pipe); - } - } else { - pipeIncX(&pipe); - ++p; - } - } - } - } else { - pipeInit(&pipe, x0 - glyph->x, y0 - glyph->y, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gFalse, gFalse); - p = glyph->data; - for (yy = 0, y1 = y0 - glyph->y; yy < glyph->h; ++yy, ++y1) { - pipeSetXY(&pipe, x0 - glyph->x, y1); - for (xx = 0, x1 = x0 - glyph->x; xx < glyph->w; xx += 8) { - alpha0 = *p++; - for (xx1 = 0; xx1 < 8 && xx + xx1 < glyph->w; ++xx1, ++x1) { - if (state->clip->test(x1, y1)) { - if (alpha0 & 0x80) { - (this->*pipe.run)(&pipe); - updateModX(x1); - updateModY(y1); - } else { - pipeIncX(&pipe); - } - } else { - pipeIncX(&pipe); - } - alpha0 <<= 1; - } - } - } - } - } - } - opClipRes = clipRes; - - return splashOk; -} - -SplashError Splash::fillImageMask(SplashImageMaskSource src, void *srcData, - int w, int h, SplashCoord *mat, - GBool glyphMode) { - SplashBitmap *scaledMask; - SplashClipResult clipRes; - GBool minorAxisZero; - int x0, y0, x1, y1, scaledWidth, scaledHeight; - - if (debugMode) { - printf("fillImageMask: w=%d h=%d mat=[%.2f %.2f %.2f %.2f %.2f %.2f]\n", - w, h, (double)mat[0], (double)mat[1], (double)mat[2], - (double)mat[3], (double)mat[4], (double)mat[5]); - } - - // check for singular matrix - if (splashAbs(mat[0] * mat[3] - mat[1] * mat[2]) < 0.000001) { - return splashErrSingularMatrix; - } - - minorAxisZero = mat[1] == 0 && mat[2] == 0; - - // scaling only - if (mat[0] > 0 && minorAxisZero && mat[3] > 0) { - x0 = imgCoordMungeLowerC(mat[4], glyphMode); - y0 = imgCoordMungeLowerC(mat[5], glyphMode); - x1 = imgCoordMungeUpperC(mat[0] + mat[4], glyphMode); - y1 = imgCoordMungeUpperC(mat[3] + mat[5], glyphMode); - // make sure narrow images cover at least one pixel - if (x0 == x1) { - ++x1; - } - if (y0 == y1) { - ++y1; - } - clipRes = state->clip->testRect(x0, y0, x1 - 1, y1 - 1); - opClipRes = clipRes; - if (clipRes != splashClipAllOutside) { - scaledWidth = x1 - x0; - scaledHeight = y1 - y0; - scaledMask = scaleMask(src, srcData, w, h, scaledWidth, scaledHeight); - blitMask(scaledMask, x0, y0, clipRes); - delete scaledMask; - } - - // scaling plus vertical flip - } else if (mat[0] > 0 && minorAxisZero && mat[3] < 0) { - x0 = imgCoordMungeLowerC(mat[4], glyphMode); - y0 = imgCoordMungeLowerC(mat[3] + mat[5], glyphMode); - x1 = imgCoordMungeUpperC(mat[0] + mat[4], glyphMode); - y1 = imgCoordMungeUpperC(mat[5], glyphMode); - // make sure narrow images cover at least one pixel - if (x0 == x1) { - ++x1; - } - if (y0 == y1) { - ++y1; - } - clipRes = state->clip->testRect(x0, y0, x1 - 1, y1 - 1); - opClipRes = clipRes; - if (clipRes != splashClipAllOutside) { - scaledWidth = x1 - x0; - scaledHeight = y1 - y0; - scaledMask = scaleMask(src, srcData, w, h, scaledWidth, scaledHeight); - vertFlipImage(scaledMask, scaledWidth, scaledHeight, 1); - blitMask(scaledMask, x0, y0, clipRes); - delete scaledMask; - } - - // all other cases - } else { - arbitraryTransformMask(src, srcData, w, h, mat, glyphMode); - } - - return splashOk; -} - -void Splash::arbitraryTransformMask(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - SplashCoord *mat, GBool glyphMode) { - SplashBitmap *scaledMask; - SplashClipResult clipRes, clipRes2; - SplashPipe pipe; - int scaledWidth, scaledHeight, t0, t1; - SplashCoord r00, r01, r10, r11, det, ir00, ir01, ir10, ir11; - SplashCoord vx[4], vy[4]; - int xMin, yMin, xMax, yMax; - ImageSection section[3]; - int nSections; - int y, xa, xb, x, i, xx, yy; - - // compute the four vertices of the target quadrilateral - vx[0] = mat[4]; vy[0] = mat[5]; - vx[1] = mat[2] + mat[4]; vy[1] = mat[3] + mat[5]; - vx[2] = mat[0] + mat[2] + mat[4]; vy[2] = mat[1] + mat[3] + mat[5]; - vx[3] = mat[0] + mat[4]; vy[3] = mat[1] + mat[5]; - - // clipping - xMin = imgCoordMungeLowerC(vx[0], glyphMode); - xMax = imgCoordMungeUpperC(vx[0], glyphMode); - yMin = imgCoordMungeLowerC(vy[0], glyphMode); - yMax = imgCoordMungeUpperC(vy[0], glyphMode); - for (i = 1; i < 4; ++i) { - t0 = imgCoordMungeLowerC(vx[i], glyphMode); - if (t0 < xMin) { - xMin = t0; - } - t0 = imgCoordMungeUpperC(vx[i], glyphMode); - if (t0 > xMax) { - xMax = t0; - } - t1 = imgCoordMungeLowerC(vy[i], glyphMode); - if (t1 < yMin) { - yMin = t1; - } - t1 = imgCoordMungeUpperC(vy[i], glyphMode); - if (t1 > yMax) { - yMax = t1; - } - } - clipRes = state->clip->testRect(xMin, yMin, xMax - 1, yMax - 1); - opClipRes = clipRes; - if (clipRes == splashClipAllOutside) { - return; - } - - // compute the scale factors - if (mat[0] >= 0) { - t0 = imgCoordMungeUpperC(mat[0] + mat[4], glyphMode) - - imgCoordMungeLowerC(mat[4], glyphMode); - } else { - t0 = imgCoordMungeUpperC(mat[4], glyphMode) - - imgCoordMungeLowerC(mat[0] + mat[4], glyphMode); - } - if (mat[1] >= 0) { - t1 = imgCoordMungeUpperC(mat[1] + mat[5], glyphMode) - - imgCoordMungeLowerC(mat[5], glyphMode); - } else { - t1 = imgCoordMungeUpperC(mat[5], glyphMode) - - imgCoordMungeLowerC(mat[1] + mat[5], glyphMode); - } - scaledWidth = t0 > t1 ? t0 : t1; - if (mat[2] >= 0) { - t0 = imgCoordMungeUpperC(mat[2] + mat[4], glyphMode) - - imgCoordMungeLowerC(mat[4], glyphMode); - } else { - t0 = imgCoordMungeUpperC(mat[4], glyphMode) - - imgCoordMungeLowerC(mat[2] + mat[4], glyphMode); - } - if (mat[3] >= 0) { - t1 = imgCoordMungeUpperC(mat[3] + mat[5], glyphMode) - - imgCoordMungeLowerC(mat[5], glyphMode); - } else { - t1 = imgCoordMungeUpperC(mat[5], glyphMode) - - imgCoordMungeLowerC(mat[3] + mat[5], glyphMode); - } - scaledHeight = t0 > t1 ? t0 : t1; - if (scaledWidth == 0) { - scaledWidth = 1; - } - if (scaledHeight == 0) { - scaledHeight = 1; - } - - // compute the inverse transform (after scaling) matrix - r00 = mat[0] / scaledWidth; - r01 = mat[1] / scaledWidth; - r10 = mat[2] / scaledHeight; - r11 = mat[3] / scaledHeight; - det = r00 * r11 - r01 * r10; - if (splashAbs(det) < 1e-6) { - // this should be caught by the singular matrix check in fillImageMask - return; - } - ir00 = r11 / det; - ir01 = -r01 / det; - ir10 = -r10 / det; - ir11 = r00 / det; - - // scale the input image - scaledMask = scaleMask(src, srcData, srcWidth, srcHeight, - scaledWidth, scaledHeight); - - // construct the three sections - i = (vy[2] <= vy[3]) ? 2 : 3; - if (vy[1] <= vy[i]) { - i = 1; - } - if (vy[0] < vy[i] || (i != 3 && vy[0] == vy[i])) { - i = 0; - } - if (vy[i] == vy[(i+1) & 3]) { - section[0].y0 = imgCoordMungeLowerC(vy[i], glyphMode); - section[0].y1 = imgCoordMungeUpperC(vy[(i+2) & 3], glyphMode) - 1; - if (vx[i] < vx[(i+1) & 3]) { - section[0].ia0 = i; - section[0].ia1 = (i+3) & 3; - section[0].ib0 = (i+1) & 3; - section[0].ib1 = (i+2) & 3; - } else { - section[0].ia0 = (i+1) & 3; - section[0].ia1 = (i+2) & 3; - section[0].ib0 = i; - section[0].ib1 = (i+3) & 3; - } - nSections = 1; - } else { - section[0].y0 = imgCoordMungeLowerC(vy[i], glyphMode); - section[2].y1 = imgCoordMungeUpperC(vy[(i+2) & 3], glyphMode) - 1; - section[0].ia0 = section[0].ib0 = i; - section[2].ia1 = section[2].ib1 = (i+2) & 3; - if (vx[(i+1) & 3] < vx[(i+3) & 3]) { - section[0].ia1 = section[2].ia0 = (i+1) & 3; - section[0].ib1 = section[2].ib0 = (i+3) & 3; - } else { - section[0].ia1 = section[2].ia0 = (i+3) & 3; - section[0].ib1 = section[2].ib0 = (i+1) & 3; - } - if (vy[(i+1) & 3] < vy[(i+3) & 3]) { - section[1].y0 = imgCoordMungeLowerC(vy[(i+1) & 3], glyphMode); - section[2].y0 = imgCoordMungeUpperC(vy[(i+3) & 3], glyphMode); - if (vx[(i+1) & 3] < vx[(i+3) & 3]) { - section[1].ia0 = (i+1) & 3; - section[1].ia1 = (i+2) & 3; - section[1].ib0 = i; - section[1].ib1 = (i+3) & 3; - } else { - section[1].ia0 = i; - section[1].ia1 = (i+3) & 3; - section[1].ib0 = (i+1) & 3; - section[1].ib1 = (i+2) & 3; - } - } else { - section[1].y0 = imgCoordMungeLowerC(vy[(i+3) & 3], glyphMode); - section[2].y0 = imgCoordMungeUpperC(vy[(i+1) & 3], glyphMode); - if (vx[(i+1) & 3] < vx[(i+3) & 3]) { - section[1].ia0 = i; - section[1].ia1 = (i+1) & 3; - section[1].ib0 = (i+3) & 3; - section[1].ib1 = (i+2) & 3; - } else { - section[1].ia0 = (i+3) & 3; - section[1].ia1 = (i+2) & 3; - section[1].ib0 = i; - section[1].ib1 = (i+1) & 3; - } - } - section[0].y1 = section[1].y0 - 1; - section[1].y1 = section[2].y0 - 1; - nSections = 3; - } - for (i = 0; i < nSections; ++i) { - section[i].xa0 = vx[section[i].ia0]; - section[i].ya0 = vy[section[i].ia0]; - section[i].xa1 = vx[section[i].ia1]; - section[i].ya1 = vy[section[i].ia1]; - section[i].xb0 = vx[section[i].ib0]; - section[i].yb0 = vy[section[i].ib0]; - section[i].xb1 = vx[section[i].ib1]; - section[i].yb1 = vy[section[i].ib1]; - section[i].dxdya = (section[i].xa1 - section[i].xa0) / - (section[i].ya1 - section[i].ya0); - section[i].dxdyb = (section[i].xb1 - section[i].xb0) / - (section[i].yb1 - section[i].yb0); - } - - // initialize the pixel pipe - pipeInit(&pipe, 0, 0, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, gFalse); - if (vectorAntialias) { - drawAAPixelInit(); - } - - // make sure narrow images cover at least one pixel - if (nSections == 1) { - if (section[0].y0 == section[0].y1) { - ++section[0].y1; - clipRes = opClipRes = splashClipPartial; - } - } else { - if (section[0].y0 == section[2].y1) { - ++section[1].y1; - clipRes = opClipRes = splashClipPartial; - } - } - - // scan all pixels inside the target region - for (i = 0; i < nSections; ++i) { - for (y = section[i].y0; y <= section[i].y1; ++y) { - xa = imgCoordMungeLowerC(section[i].xa0 + - (y + 0.5 - section[i].ya0) * section[i].dxdya, - glyphMode); - xb = imgCoordMungeUpperC(section[i].xb0 + - (y + 0.5 - section[i].yb0) * section[i].dxdyb, - glyphMode); - // make sure narrow images cover at least one pixel - if (xa == xb) { - ++xb; - } - if (clipRes != splashClipAllInside) { - clipRes2 = state->clip->testSpan(xa, xb - 1, y); - } else { - clipRes2 = clipRes; - } - for (x = xa; x < xb; ++x) { - // map (x+0.5, y+0.5) back to the scaled image - xx = splashFloor((x + 0.5 - mat[4]) * ir00 + - (y + 0.5 - mat[5]) * ir10); - yy = splashFloor((x + 0.5 - mat[4]) * ir01 + - (y + 0.5 - mat[5]) * ir11); - // xx should always be within bounds, but floating point - // inaccuracy can cause problems - if (xx < 0) { - xx = 0; - } else if (xx >= scaledWidth) { - xx = scaledWidth - 1; - } - if (yy < 0) { - yy = 0; - } else if (yy >= scaledHeight) { - yy = scaledHeight - 1; - } - pipe.shape = scaledMask->data[yy * scaledWidth + xx]; - if (vectorAntialias && clipRes2 != splashClipAllInside) { - drawAAPixel(&pipe, x, y); - } else { - drawPixel(&pipe, x, y, clipRes2 == splashClipAllInside); - } - } - } - } - - delete scaledMask; -} - -// Scale an image mask into a SplashBitmap. -SplashBitmap *Splash::scaleMask(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight) { - SplashBitmap *dest; - - dest = new SplashBitmap(scaledWidth, scaledHeight, 1, splashModeMono8, - gFalse); - if (scaledHeight < srcHeight) { - if (scaledWidth < srcWidth) { - scaleMaskYdXd(src, srcData, srcWidth, srcHeight, - scaledWidth, scaledHeight, dest); - } else { - scaleMaskYdXu(src, srcData, srcWidth, srcHeight, - scaledWidth, scaledHeight, dest); - } - } else { - if (scaledWidth < srcWidth) { - scaleMaskYuXd(src, srcData, srcWidth, srcHeight, - scaledWidth, scaledHeight, dest); - } else { - scaleMaskYuXu(src, srcData, srcWidth, srcHeight, - scaledWidth, scaledHeight, dest); - } - } - return dest; -} - -void Splash::scaleMaskYdXd(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf; - Guint *pixBuf; - Guint pix; - Guchar *destPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, xx, d, d0, d1; - int i, j; - - // Bresenham parameters for y scale - yp = srcHeight / scaledHeight; - yq = srcHeight % scaledHeight; - - // Bresenham parameters for x scale - xp = srcWidth / scaledWidth; - xq = srcWidth % scaledWidth; - - // allocate buffers - lineBuf = (Guchar *)gmalloc(srcWidth); - pixBuf = (Guint *)gmallocn(srcWidth, sizeof(int)); - - // init y scale Bresenham - yt = 0; - - destPtr = dest->data; - for (y = 0; y < scaledHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= scaledHeight) { - yt -= scaledHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read rows from image - memset(pixBuf, 0, srcWidth * sizeof(int)); - for (i = 0; i < yStep; ++i) { - (*src)(srcData, lineBuf); - for (j = 0; j < srcWidth; ++j) { - pixBuf[j] += lineBuf[j]; - } - } - - // init x scale Bresenham - xt = 0; - d0 = (255 << 23) / (yStep * xp); - d1 = (255 << 23) / (yStep * (xp + 1)); - - xx = 0; - for (x = 0; x < scaledWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= scaledWidth) { - xt -= scaledWidth; - xStep = xp + 1; - d = d1; - } else { - xStep = xp; - d = d0; - } - - // compute the final pixel - pix = 0; - for (i = 0; i < xStep; ++i) { - pix += pixBuf[xx++]; - } - // (255 * pix) / xStep * yStep - pix = (pix * d) >> 23; - - // store the pixel - *destPtr++ = (Guchar)pix; - } - } - - gfree(pixBuf); - gfree(lineBuf); -} - -void Splash::scaleMaskYdXu(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf; - Guint *pixBuf; - Guint pix; - Guchar *destPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, d; - int i, j; - - // Bresenham parameters for y scale - yp = srcHeight / scaledHeight; - yq = srcHeight % scaledHeight; - - // Bresenham parameters for x scale - xp = scaledWidth / srcWidth; - xq = scaledWidth % srcWidth; - - // allocate buffers - lineBuf = (Guchar *)gmalloc(srcWidth); - pixBuf = (Guint *)gmallocn(srcWidth, sizeof(int)); - - // init y scale Bresenham - yt = 0; - - destPtr = dest->data; - for (y = 0; y < scaledHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= scaledHeight) { - yt -= scaledHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read rows from image - memset(pixBuf, 0, srcWidth * sizeof(int)); - for (i = 0; i < yStep; ++i) { - (*src)(srcData, lineBuf); - for (j = 0; j < srcWidth; ++j) { - pixBuf[j] += lineBuf[j]; - } - } - - // init x scale Bresenham - xt = 0; - d = (255 << 23) / yStep; - - for (x = 0; x < srcWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= srcWidth) { - xt -= srcWidth; - xStep = xp + 1; - } else { - xStep = xp; - } - - // compute the final pixel - pix = pixBuf[x]; - // (255 * pix) / yStep - pix = (pix * d) >> 23; - - // store the pixel - for (i = 0; i < xStep; ++i) { - *destPtr++ = (Guchar)pix; - } - } - } - - gfree(pixBuf); - gfree(lineBuf); -} - -void Splash::scaleMaskYuXd(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf; - Guint pix; - Guchar *destPtr0, *destPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, xx, d, d0, d1; - int i; - - // Bresenham parameters for y scale - yp = scaledHeight / srcHeight; - yq = scaledHeight % srcHeight; - - // Bresenham parameters for x scale - xp = srcWidth / scaledWidth; - xq = srcWidth % scaledWidth; - - // allocate buffers - lineBuf = (Guchar *)gmalloc(srcWidth); - - // init y scale Bresenham - yt = 0; - - destPtr0 = dest->data; - for (y = 0; y < srcHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= srcHeight) { - yt -= srcHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read row from image - (*src)(srcData, lineBuf); - - // init x scale Bresenham - xt = 0; - d0 = (255 << 23) / xp; - d1 = (255 << 23) / (xp + 1); - - xx = 0; - for (x = 0; x < scaledWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= scaledWidth) { - xt -= scaledWidth; - xStep = xp + 1; - d = d1; - } else { - xStep = xp; - d = d0; - } - - // compute the final pixel - pix = 0; - for (i = 0; i < xStep; ++i) { - pix += lineBuf[xx++]; - } - // (255 * pix) / xStep - pix = (pix * d) >> 23; - - // store the pixel - for (i = 0; i < yStep; ++i) { - destPtr = destPtr0 + i * scaledWidth + x; - *destPtr = (Guchar)pix; - } - } - - destPtr0 += yStep * scaledWidth; - } - - gfree(lineBuf); -} - -void Splash::scaleMaskYuXu(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf; - Guint pix; - Guchar *destPtr0, *destPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, xx; - int i, j; - - // Bresenham parameters for y scale - yp = scaledHeight / srcHeight; - yq = scaledHeight % srcHeight; - - // Bresenham parameters for x scale - xp = scaledWidth / srcWidth; - xq = scaledWidth % srcWidth; - - // allocate buffers - lineBuf = (Guchar *)gmalloc(srcWidth); - - // init y scale Bresenham - yt = 0; - - destPtr0 = dest->data; - for (y = 0; y < srcHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= srcHeight) { - yt -= srcHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read row from image - (*src)(srcData, lineBuf); - - // init x scale Bresenham - xt = 0; - - xx = 0; - for (x = 0; x < srcWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= srcWidth) { - xt -= srcWidth; - xStep = xp + 1; - } else { - xStep = xp; - } - - // compute the final pixel - pix = lineBuf[x] ? 255 : 0; - - // store the pixel - for (i = 0; i < yStep; ++i) { - for (j = 0; j < xStep; ++j) { - destPtr = destPtr0 + i * scaledWidth + xx + j; - *destPtr++ = (Guchar)pix; - } - } - - xx += xStep; - } - - destPtr0 += yStep * scaledWidth; - } - - gfree(lineBuf); -} - -void Splash::blitMask(SplashBitmap *src, int xDest, int yDest, - SplashClipResult clipRes) { - SplashPipe pipe; - Guchar *p; - int w, h, x, y; - - w = src->getWidth(); - h = src->getHeight(); - if (vectorAntialias && clipRes != splashClipAllInside) { - pipeInit(&pipe, xDest, yDest, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, gFalse); - drawAAPixelInit(); - p = src->getDataPtr(); - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - pipe.shape = *p++; - drawAAPixel(&pipe, xDest + x, yDest + y); - } - } - } else { - pipeInit(&pipe, xDest, yDest, state->fillPattern, NULL, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, gFalse); - p = src->getDataPtr(); - if (clipRes == splashClipAllInside) { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - for (x = 0; x < w; ++x) { - if (*p) { - pipe.shape = *p; - (this->*pipe.run)(&pipe); - } else { - pipeIncX(&pipe); - } - ++p; - } - } - updateModX(xDest); - updateModX(xDest + w - 1); - updateModY(yDest); - updateModY(yDest + h - 1); - } else { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - for (x = 0; x < w; ++x) { - if (*p && state->clip->test(xDest + x, yDest + y)) { - pipe.shape = *p; - (this->*pipe.run)(&pipe); - updateModX(xDest + x); - updateModY(yDest + y); - } else { - pipeIncX(&pipe); - } - ++p; - } - } - } - } -} - -SplashError Splash::drawImage(SplashImageSource src, void *srcData, - SplashColorMode srcMode, GBool srcAlpha, - int w, int h, SplashCoord *mat) { - GBool ok; - SplashBitmap *scaledImg; - SplashClipResult clipRes; - GBool minorAxisZero; - int x0, y0, x1, y1, scaledWidth, scaledHeight; - int nComps; - - if (debugMode) { - printf("drawImage: srcMode=%d srcAlpha=%d w=%d h=%d mat=[%.2f %.2f %.2f %.2f %.2f %.2f]\n", - srcMode, srcAlpha, w, h, (double)mat[0], (double)mat[1], (double)mat[2], - (double)mat[3], (double)mat[4], (double)mat[5]); - } - - // check color modes - ok = gFalse; // make gcc happy - nComps = 0; // make gcc happy - switch (bitmap->mode) { - case splashModeMono1: - case splashModeMono8: - ok = srcMode == splashModeMono8; - nComps = 1; - break; - case splashModeRGB8: - ok = srcMode == splashModeRGB8; - nComps = 3; - break; - case splashModeBGR8: - ok = srcMode == splashModeBGR8; - nComps = 3; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - ok = srcMode == splashModeCMYK8; - nComps = 4; - break; -#endif - default: - ok = gFalse; - break; - } - if (!ok) { - return splashErrModeMismatch; - } - - // check for singular matrix - if (splashAbs(mat[0] * mat[3] - mat[1] * mat[2]) < 0.000001) { - return splashErrSingularMatrix; - } - - minorAxisZero = mat[1] == 0 && mat[2] == 0; - - // scaling only - if (mat[0] > 0 && minorAxisZero && mat[3] > 0) { - x0 = imgCoordMungeLower(mat[4]); - y0 = imgCoordMungeLower(mat[5]); - x1 = imgCoordMungeUpper(mat[0] + mat[4]); - y1 = imgCoordMungeUpper(mat[3] + mat[5]); - // make sure narrow images cover at least one pixel - if (x0 == x1) { - ++x1; - } - if (y0 == y1) { - ++y1; - } - clipRes = state->clip->testRect(x0, y0, x1 - 1, y1 - 1); - opClipRes = clipRes; - if (clipRes != splashClipAllOutside) { - scaledWidth = x1 - x0; - scaledHeight = y1 - y0; - scaledImg = scaleImage(src, srcData, srcMode, nComps, srcAlpha, w, h, - scaledWidth, scaledHeight); - blitImage(scaledImg, srcAlpha, x0, y0, clipRes); - delete scaledImg; - } - - // scaling plus vertical flip - } else if (mat[0] > 0 && minorAxisZero && mat[3] < 0) { - x0 = imgCoordMungeLower(mat[4]); - y0 = imgCoordMungeLower(mat[3] + mat[5]); - x1 = imgCoordMungeUpper(mat[0] + mat[4]); - y1 = imgCoordMungeUpper(mat[5]); - if (x0 == x1) { - if (mat[4] + 0.5 * mat[0] < x0) { - --x0; - } else { - ++x1; - } - } - if (y0 == y1) { - if (mat[5] + 0.5 * mat[1] < y0) { - --y0; - } else { - ++y1; - } - } - clipRes = state->clip->testRect(x0, y0, x1 - 1, y1 - 1); - opClipRes = clipRes; - if (clipRes != splashClipAllOutside) { - scaledWidth = x1 - x0; - scaledHeight = y1 - y0; - scaledImg = scaleImage(src, srcData, srcMode, nComps, srcAlpha, w, h, - scaledWidth, scaledHeight); - vertFlipImage(scaledImg, scaledWidth, scaledHeight, nComps); - blitImage(scaledImg, srcAlpha, x0, y0, clipRes); - delete scaledImg; - } - - // all other cases - } else { - arbitraryTransformImage(src, srcData, srcMode, nComps, srcAlpha, - w, h, mat); - } - - return splashOk; -} - -void Splash::arbitraryTransformImage(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, - int srcWidth, int srcHeight, - SplashCoord *mat) { - SplashBitmap *scaledImg; - SplashClipResult clipRes, clipRes2; - SplashPipe pipe; - SplashColor pixel; - int scaledWidth, scaledHeight, t0, t1; - SplashCoord r00, r01, r10, r11, det, ir00, ir01, ir10, ir11; - SplashCoord vx[4], vy[4]; - int xMin, yMin, xMax, yMax; - ImageSection section[3]; - int nSections; - int y, xa, xb, x, i, xx, yy; - - // compute the four vertices of the target quadrilateral - vx[0] = mat[4]; vy[0] = mat[5]; - vx[1] = mat[2] + mat[4]; vy[1] = mat[3] + mat[5]; - vx[2] = mat[0] + mat[2] + mat[4]; vy[2] = mat[1] + mat[3] + mat[5]; - vx[3] = mat[0] + mat[4]; vy[3] = mat[1] + mat[5]; - - // clipping - xMin = imgCoordMungeLower(vx[0]); - xMax = imgCoordMungeUpper(vx[0]); - yMin = imgCoordMungeLower(vy[0]); - yMax = imgCoordMungeUpper(vy[0]); - for (i = 1; i < 4; ++i) { - t0 = imgCoordMungeLower(vx[i]); - if (t0 < xMin) { - xMin = t0; - } - t0 = imgCoordMungeUpper(vx[i]); - if (t0 > xMax) { - xMax = t0; - } - t1 = imgCoordMungeLower(vy[i]); - if (t1 < yMin) { - yMin = t1; - } - t1 = imgCoordMungeUpper(vy[i]); - if (t1 > yMax) { - yMax = t1; - } - } - clipRes = state->clip->testRect(xMin, yMin, xMax - 1, yMax - 1); - opClipRes = clipRes; - if (clipRes == splashClipAllOutside) { - return; - } - - // compute the scale factors - if (mat[0] >= 0) { - t0 = imgCoordMungeUpper(mat[0] + mat[4]) - imgCoordMungeLower(mat[4]); - } else { - t0 = imgCoordMungeUpper(mat[4]) - imgCoordMungeLower(mat[0] + mat[4]); - } - if (mat[1] >= 0) { - t1 = imgCoordMungeUpper(mat[1] + mat[5]) - imgCoordMungeLower(mat[5]); - } else { - t1 = imgCoordMungeUpper(mat[5]) - imgCoordMungeLower(mat[1] + mat[5]); - } - scaledWidth = t0 > t1 ? t0 : t1; - if (mat[2] >= 0) { - t0 = imgCoordMungeUpper(mat[2] + mat[4]) - imgCoordMungeLower(mat[4]); - } else { - t0 = imgCoordMungeUpper(mat[4]) - imgCoordMungeLower(mat[2] + mat[4]); - } - if (mat[3] >= 0) { - t1 = imgCoordMungeUpper(mat[3] + mat[5]) - imgCoordMungeLower(mat[5]); - } else { - t1 = imgCoordMungeUpper(mat[5]) - imgCoordMungeLower(mat[3] + mat[5]); - } - scaledHeight = t0 > t1 ? t0 : t1; - if (scaledWidth == 0) { - scaledWidth = 1; - } - if (scaledHeight == 0) { - scaledHeight = 1; - } - - // compute the inverse transform (after scaling) matrix - r00 = mat[0] / scaledWidth; - r01 = mat[1] / scaledWidth; - r10 = mat[2] / scaledHeight; - r11 = mat[3] / scaledHeight; - det = r00 * r11 - r01 * r10; - if (splashAbs(det) < 1e-6) { - // this should be caught by the singular matrix check in drawImage - return; - } - ir00 = r11 / det; - ir01 = -r01 / det; - ir10 = -r10 / det; - ir11 = r00 / det; - - // scale the input image - scaledImg = scaleImage(src, srcData, srcMode, nComps, srcAlpha, - srcWidth, srcHeight, scaledWidth, scaledHeight); - - // construct the three sections - i = (vy[2] <= vy[3]) ? 2 : 3; - if (vy[1] <= vy[i]) { - i = 1; - } - if (vy[0] < vy[i] || (i != 3 && vy[0] == vy[i])) { - i = 0; - } - if (vy[i] == vy[(i+1) & 3]) { - section[0].y0 = imgCoordMungeLower(vy[i]); - section[0].y1 = imgCoordMungeUpper(vy[(i+2) & 3]) - 1; - if (vx[i] < vx[(i+1) & 3]) { - section[0].ia0 = i; - section[0].ia1 = (i+3) & 3; - section[0].ib0 = (i+1) & 3; - section[0].ib1 = (i+2) & 3; - } else { - section[0].ia0 = (i+1) & 3; - section[0].ia1 = (i+2) & 3; - section[0].ib0 = i; - section[0].ib1 = (i+3) & 3; - } - nSections = 1; - } else { - section[0].y0 = imgCoordMungeLower(vy[i]); - section[2].y1 = imgCoordMungeUpper(vy[(i+2) & 3]) - 1; - section[0].ia0 = section[0].ib0 = i; - section[2].ia1 = section[2].ib1 = (i+2) & 3; - if (vx[(i+1) & 3] < vx[(i+3) & 3]) { - section[0].ia1 = section[2].ia0 = (i+1) & 3; - section[0].ib1 = section[2].ib0 = (i+3) & 3; - } else { - section[0].ia1 = section[2].ia0 = (i+3) & 3; - section[0].ib1 = section[2].ib0 = (i+1) & 3; - } - if (vy[(i+1) & 3] < vy[(i+3) & 3]) { - section[1].y0 = imgCoordMungeLower(vy[(i+1) & 3]); - section[2].y0 = imgCoordMungeUpper(vy[(i+3) & 3]); - if (vx[(i+1) & 3] < vx[(i+3) & 3]) { - section[1].ia0 = (i+1) & 3; - section[1].ia1 = (i+2) & 3; - section[1].ib0 = i; - section[1].ib1 = (i+3) & 3; - } else { - section[1].ia0 = i; - section[1].ia1 = (i+3) & 3; - section[1].ib0 = (i+1) & 3; - section[1].ib1 = (i+2) & 3; - } - } else { - section[1].y0 = imgCoordMungeLower(vy[(i+3) & 3]); - section[2].y0 = imgCoordMungeUpper(vy[(i+1) & 3]); - if (vx[(i+1) & 3] < vx[(i+3) & 3]) { - section[1].ia0 = i; - section[1].ia1 = (i+1) & 3; - section[1].ib0 = (i+3) & 3; - section[1].ib1 = (i+2) & 3; - } else { - section[1].ia0 = (i+3) & 3; - section[1].ia1 = (i+2) & 3; - section[1].ib0 = i; - section[1].ib1 = (i+1) & 3; - } - } - section[0].y1 = section[1].y0 - 1; - section[1].y1 = section[2].y0 - 1; - nSections = 3; - } - for (i = 0; i < nSections; ++i) { - section[i].xa0 = vx[section[i].ia0]; - section[i].ya0 = vy[section[i].ia0]; - section[i].xa1 = vx[section[i].ia1]; - section[i].ya1 = vy[section[i].ia1]; - section[i].xb0 = vx[section[i].ib0]; - section[i].yb0 = vy[section[i].ib0]; - section[i].xb1 = vx[section[i].ib1]; - section[i].yb1 = vy[section[i].ib1]; - section[i].dxdya = (section[i].xa1 - section[i].xa0) / - (section[i].ya1 - section[i].ya0); - section[i].dxdyb = (section[i].xb1 - section[i].xb0) / - (section[i].yb1 - section[i].yb0); - } - - // initialize the pixel pipe - pipeInit(&pipe, 0, 0, NULL, pixel, - (Guchar)splashRound(state->fillAlpha * 255), - srcAlpha || (vectorAntialias && clipRes != splashClipAllInside), - gFalse); - if (vectorAntialias) { - drawAAPixelInit(); - } - - // make sure narrow images cover at least one pixel - if (nSections == 1) { - if (section[0].y0 == section[0].y1) { - ++section[0].y1; - clipRes = opClipRes = splashClipPartial; - } - } else { - if (section[0].y0 == section[2].y1) { - ++section[1].y1; - clipRes = opClipRes = splashClipPartial; - } - } - - // scan all pixels inside the target region - for (i = 0; i < nSections; ++i) { - for (y = section[i].y0; y <= section[i].y1; ++y) { - xa = imgCoordMungeLower(section[i].xa0 + - (y + 0.5 - section[i].ya0) * section[i].dxdya); - xb = imgCoordMungeUpper(section[i].xb0 + - (y + 0.5 - section[i].yb0) * section[i].dxdyb); - // make sure narrow images cover at least one pixel - if (xa == xb) { - ++xb; - } - if (clipRes != splashClipAllInside) { - clipRes2 = state->clip->testSpan(xa, xb - 1, y); - } else { - clipRes2 = clipRes; - } - for (x = xa; x < xb; ++x) { - // map (x+0.5, y+0.5) back to the scaled image - xx = splashFloor((x + 0.5 - mat[4]) * ir00 + - (y + 0.5 - mat[5]) * ir10); - yy = splashFloor((x + 0.5 - mat[4]) * ir01 + - (y + 0.5 - mat[5]) * ir11); - // xx should always be within bounds, but floating point - // inaccuracy can cause problems - if (xx < 0) { - xx = 0; - } else if (xx >= scaledWidth) { - xx = scaledWidth - 1; - } - if (yy < 0) { - yy = 0; - } else if (yy >= scaledHeight) { - yy = scaledHeight - 1; - } - scaledImg->getPixel(xx, yy, pixel); - if (srcAlpha) { - pipe.shape = scaledImg->alpha[yy * scaledWidth + xx]; - } else { - pipe.shape = 255; - } - if (vectorAntialias && clipRes2 != splashClipAllInside) { - drawAAPixel(&pipe, x, y); - } else { - drawPixel(&pipe, x, y, clipRes2 == splashClipAllInside); - } - } - } - } - - delete scaledImg; -} - -// Scale an image into a SplashBitmap. -SplashBitmap *Splash::scaleImage(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight) { - SplashBitmap *dest; - - dest = new SplashBitmap(scaledWidth, scaledHeight, 1, srcMode, srcAlpha); - if (scaledHeight < srcHeight) { - if (scaledWidth < srcWidth) { - scaleImageYdXd(src, srcData, srcMode, nComps, srcAlpha, - srcWidth, srcHeight, scaledWidth, scaledHeight, dest); - } else { - scaleImageYdXu(src, srcData, srcMode, nComps, srcAlpha, - srcWidth, srcHeight, scaledWidth, scaledHeight, dest); - } - } else { - if (scaledWidth < srcWidth) { - scaleImageYuXd(src, srcData, srcMode, nComps, srcAlpha, - srcWidth, srcHeight, scaledWidth, scaledHeight, dest); - } else { - scaleImageYuXu(src, srcData, srcMode, nComps, srcAlpha, - srcWidth, srcHeight, scaledWidth, scaledHeight, dest); - } - } - return dest; -} - -void Splash::scaleImageYdXd(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf, *alphaLineBuf; - Guint *pixBuf, *alphaPixBuf; - Guint pix0, pix1, pix2, pix3; - Guint alpha; - Guchar *destPtr, *destAlphaPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, xx, xxa, d, d0, d1; - int i, j; - - // Bresenham parameters for y scale - yp = srcHeight / scaledHeight; - yq = srcHeight % scaledHeight; - - // Bresenham parameters for x scale - xp = srcWidth / scaledWidth; - xq = srcWidth % scaledWidth; - - // allocate buffers - lineBuf = (Guchar *)gmallocn(srcWidth, nComps); - pixBuf = (Guint *)gmallocn(srcWidth, nComps * sizeof(int)); - if (srcAlpha) { - alphaLineBuf = (Guchar *)gmalloc(srcWidth); - alphaPixBuf = (Guint *)gmallocn(srcWidth, sizeof(int)); - } else { - alphaLineBuf = NULL; - alphaPixBuf = NULL; - } - - // init y scale Bresenham - yt = 0; - - destPtr = dest->data; - destAlphaPtr = dest->alpha; - for (y = 0; y < scaledHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= scaledHeight) { - yt -= scaledHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read rows from image - memset(pixBuf, 0, srcWidth * nComps * sizeof(int)); - if (srcAlpha) { - memset(alphaPixBuf, 0, srcWidth * sizeof(int)); - } - for (i = 0; i < yStep; ++i) { - (*src)(srcData, lineBuf, alphaLineBuf); - for (j = 0; j < srcWidth * nComps; ++j) { - pixBuf[j] += lineBuf[j]; - } - if (srcAlpha) { - for (j = 0; j < srcWidth; ++j) { - alphaPixBuf[j] += alphaLineBuf[j]; - } - } - } - - // init x scale Bresenham - xt = 0; - d0 = (1 << 23) / (yStep * xp); - d1 = (1 << 23) / (yStep * (xp + 1)); - - xx = xxa = 0; - for (x = 0; x < scaledWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= scaledWidth) { - xt -= scaledWidth; - xStep = xp + 1; - d = d1; - } else { - xStep = xp; - d = d0; - } - - switch (srcMode) { - - case splashModeMono8: - - // compute the final pixel - pix0 = 0; - for (i = 0; i < xStep; ++i) { - pix0 += pixBuf[xx++]; - } - // pix / xStep * yStep - pix0 = (pix0 * d) >> 23; - - // store the pixel - *destPtr++ = (Guchar)pix0; - break; - - case splashModeRGB8: - - // compute the final pixel - pix0 = pix1 = pix2 = 0; - for (i = 0; i < xStep; ++i) { - pix0 += pixBuf[xx]; - pix1 += pixBuf[xx+1]; - pix2 += pixBuf[xx+2]; - xx += 3; - } - // pix / xStep * yStep - pix0 = (pix0 * d) >> 23; - pix1 = (pix1 * d) >> 23; - pix2 = (pix2 * d) >> 23; - - // store the pixel - *destPtr++ = (Guchar)pix0; - *destPtr++ = (Guchar)pix1; - *destPtr++ = (Guchar)pix2; - break; - - case splashModeBGR8: - - // compute the final pixel - pix0 = pix1 = pix2 = 0; - for (i = 0; i < xStep; ++i) { - pix0 += pixBuf[xx]; - pix1 += pixBuf[xx+1]; - pix2 += pixBuf[xx+2]; - xx += 3; - } - // pix / xStep * yStep - pix0 = (pix0 * d) >> 23; - pix1 = (pix1 * d) >> 23; - pix2 = (pix2 * d) >> 23; - - // store the pixel - *destPtr++ = (Guchar)pix2; - *destPtr++ = (Guchar)pix1; - *destPtr++ = (Guchar)pix0; - break; - -#if SPLASH_CMYK - case splashModeCMYK8: - - // compute the final pixel - pix0 = pix1 = pix2 = pix3 = 0; - for (i = 0; i < xStep; ++i) { - pix0 += pixBuf[xx]; - pix1 += pixBuf[xx+1]; - pix2 += pixBuf[xx+2]; - pix3 += pixBuf[xx+3]; - xx += 4; - } - // pix / xStep * yStep - pix0 = (pix0 * d) >> 23; - pix1 = (pix1 * d) >> 23; - pix2 = (pix2 * d) >> 23; - pix3 = (pix3 * d) >> 23; - - // store the pixel - *destPtr++ = (Guchar)pix0; - *destPtr++ = (Guchar)pix1; - *destPtr++ = (Guchar)pix2; - *destPtr++ = (Guchar)pix3; - break; -#endif - - - case splashModeMono1: // mono1 is not allowed - default: - break; - } - - // process alpha - if (srcAlpha) { - alpha = 0; - for (i = 0; i < xStep; ++i, ++xxa) { - alpha += alphaPixBuf[xxa]; - } - // alpha / xStep * yStep - alpha = (alpha * d) >> 23; - *destAlphaPtr++ = (Guchar)alpha; - } - } - } - - gfree(alphaPixBuf); - gfree(alphaLineBuf); - gfree(pixBuf); - gfree(lineBuf); -} - -void Splash::scaleImageYdXu(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf, *alphaLineBuf; - Guint *pixBuf, *alphaPixBuf; - Guint pix[splashMaxColorComps]; - Guint alpha; - Guchar *destPtr, *destAlphaPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, d; - int i, j; - - // Bresenham parameters for y scale - yp = srcHeight / scaledHeight; - yq = srcHeight % scaledHeight; - - // Bresenham parameters for x scale - xp = scaledWidth / srcWidth; - xq = scaledWidth % srcWidth; - - // allocate buffers - lineBuf = (Guchar *)gmallocn(srcWidth, nComps); - pixBuf = (Guint *)gmallocn(srcWidth, nComps * sizeof(int)); - if (srcAlpha) { - alphaLineBuf = (Guchar *)gmalloc(srcWidth); - alphaPixBuf = (Guint *)gmallocn(srcWidth, sizeof(int)); - } else { - alphaLineBuf = NULL; - alphaPixBuf = NULL; - } - - // init y scale Bresenham - yt = 0; - - destPtr = dest->data; - destAlphaPtr = dest->alpha; - for (y = 0; y < scaledHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= scaledHeight) { - yt -= scaledHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read rows from image - memset(pixBuf, 0, srcWidth * nComps * sizeof(int)); - if (srcAlpha) { - memset(alphaPixBuf, 0, srcWidth * sizeof(int)); - } - for (i = 0; i < yStep; ++i) { - (*src)(srcData, lineBuf, alphaLineBuf); - for (j = 0; j < srcWidth * nComps; ++j) { - pixBuf[j] += lineBuf[j]; - } - if (srcAlpha) { - for (j = 0; j < srcWidth; ++j) { - alphaPixBuf[j] += alphaLineBuf[j]; - } - } - } - - // init x scale Bresenham - xt = 0; - d = (1 << 23) / yStep; - - for (x = 0; x < srcWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= srcWidth) { - xt -= srcWidth; - xStep = xp + 1; - } else { - xStep = xp; - } - - // compute the final pixel - for (i = 0; i < nComps; ++i) { - // pixBuf[] / yStep - pix[i] = (pixBuf[x * nComps + i] * d) >> 23; - } - - // store the pixel - switch (srcMode) { - case splashModeMono1: // mono1 is not allowed - break; - case splashModeMono8: - for (i = 0; i < xStep; ++i) { - *destPtr++ = (Guchar)pix[0]; - } - break; - case splashModeRGB8: - for (i = 0; i < xStep; ++i) { - *destPtr++ = (Guchar)pix[0]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[2]; - } - break; - case splashModeBGR8: - for (i = 0; i < xStep; ++i) { - *destPtr++ = (Guchar)pix[2]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[0]; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - for (i = 0; i < xStep; ++i) { - *destPtr++ = (Guchar)pix[0]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[2]; - *destPtr++ = (Guchar)pix[3]; - } - break; -#endif - } - - // process alpha - if (srcAlpha) { - // alphaPixBuf[] / yStep - alpha = (alphaPixBuf[x] * d) >> 23; - for (i = 0; i < xStep; ++i) { - *destAlphaPtr++ = (Guchar)alpha; - } - } - } - } - - gfree(alphaPixBuf); - gfree(alphaLineBuf); - gfree(pixBuf); - gfree(lineBuf); -} - -void Splash::scaleImageYuXd(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf, *alphaLineBuf; - Guint pix[splashMaxColorComps]; - Guint alpha; - Guchar *destPtr0, *destPtr, *destAlphaPtr0, *destAlphaPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, xx, xxa, d, d0, d1; - int i, j; - - // Bresenham parameters for y scale - yp = scaledHeight / srcHeight; - yq = scaledHeight % srcHeight; - - // Bresenham parameters for x scale - xp = srcWidth / scaledWidth; - xq = srcWidth % scaledWidth; - - // allocate buffers - lineBuf = (Guchar *)gmallocn(srcWidth, nComps); - if (srcAlpha) { - alphaLineBuf = (Guchar *)gmalloc(srcWidth); - } else { - alphaLineBuf = NULL; - } - - // init y scale Bresenham - yt = 0; - - destPtr0 = dest->data; - destAlphaPtr0 = dest->alpha; - for (y = 0; y < srcHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= srcHeight) { - yt -= srcHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read row from image - (*src)(srcData, lineBuf, alphaLineBuf); - - // init x scale Bresenham - xt = 0; - d0 = (1 << 23) / xp; - d1 = (1 << 23) / (xp + 1); - - xx = xxa = 0; - for (x = 0; x < scaledWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= scaledWidth) { - xt -= scaledWidth; - xStep = xp + 1; - d = d1; - } else { - xStep = xp; - d = d0; - } - - // compute the final pixel - for (i = 0; i < nComps; ++i) { - pix[i] = 0; - } - for (i = 0; i < xStep; ++i) { - for (j = 0; j < nComps; ++j, ++xx) { - pix[j] += lineBuf[xx]; - } - } - for (i = 0; i < nComps; ++i) { - // pix[] / xStep - pix[i] = (pix[i] * d) >> 23; - } - - // store the pixel - switch (srcMode) { - case splashModeMono1: // mono1 is not allowed - break; - case splashModeMono8: - for (i = 0; i < yStep; ++i) { - destPtr = destPtr0 + (i * scaledWidth + x) * nComps; - *destPtr++ = (Guchar)pix[0]; - } - break; - case splashModeRGB8: - for (i = 0; i < yStep; ++i) { - destPtr = destPtr0 + (i * scaledWidth + x) * nComps; - *destPtr++ = (Guchar)pix[0]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[2]; - } - break; - case splashModeBGR8: - for (i = 0; i < yStep; ++i) { - destPtr = destPtr0 + (i * scaledWidth + x) * nComps; - *destPtr++ = (Guchar)pix[2]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[0]; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - for (i = 0; i < yStep; ++i) { - destPtr = destPtr0 + (i * scaledWidth + x) * nComps; - *destPtr++ = (Guchar)pix[0]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[2]; - *destPtr++ = (Guchar)pix[3]; - } - break; -#endif - } - - // process alpha - if (srcAlpha) { - alpha = 0; - for (i = 0; i < xStep; ++i, ++xxa) { - alpha += alphaLineBuf[xxa]; - } - // alpha / xStep - alpha = (alpha * d) >> 23; - for (i = 0; i < yStep; ++i) { - destAlphaPtr = destAlphaPtr0 + i * scaledWidth + x; - *destAlphaPtr = (Guchar)alpha; - } - } - } - - destPtr0 += yStep * scaledWidth * nComps; - if (srcAlpha) { - destAlphaPtr0 += yStep * scaledWidth; - } - } - - gfree(alphaLineBuf); - gfree(lineBuf); -} - -void Splash::scaleImageYuXu(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest) { - Guchar *lineBuf, *alphaLineBuf; - Guint pix[splashMaxColorComps]; - Guint alpha; - Guchar *destPtr0, *destPtr, *destAlphaPtr0, *destAlphaPtr; - int yp, yq, xp, xq, yt, y, yStep, xt, x, xStep, xx; - int i, j; - - // Bresenham parameters for y scale - yp = scaledHeight / srcHeight; - yq = scaledHeight % srcHeight; - - // Bresenham parameters for x scale - xp = scaledWidth / srcWidth; - xq = scaledWidth % srcWidth; - - // allocate buffers - lineBuf = (Guchar *)gmallocn(srcWidth, nComps); - if (srcAlpha) { - alphaLineBuf = (Guchar *)gmalloc(srcWidth); - } else { - alphaLineBuf = NULL; - } - - // init y scale Bresenham - yt = 0; - - destPtr0 = dest->data; - destAlphaPtr0 = dest->alpha; - for (y = 0; y < srcHeight; ++y) { - - // y scale Bresenham - if ((yt += yq) >= srcHeight) { - yt -= srcHeight; - yStep = yp + 1; - } else { - yStep = yp; - } - - // read row from image - (*src)(srcData, lineBuf, alphaLineBuf); - - // init x scale Bresenham - xt = 0; - - xx = 0; - for (x = 0; x < srcWidth; ++x) { - - // x scale Bresenham - if ((xt += xq) >= srcWidth) { - xt -= srcWidth; - xStep = xp + 1; - } else { - xStep = xp; - } - - // compute the final pixel - for (i = 0; i < nComps; ++i) { - pix[i] = lineBuf[x * nComps + i]; - } - - // store the pixel - switch (srcMode) { - case splashModeMono1: // mono1 is not allowed - break; - case splashModeMono8: - for (i = 0; i < yStep; ++i) { - for (j = 0; j < xStep; ++j) { - destPtr = destPtr0 + (i * scaledWidth + xx + j) * nComps; - *destPtr++ = (Guchar)pix[0]; - } - } - break; - case splashModeRGB8: - for (i = 0; i < yStep; ++i) { - for (j = 0; j < xStep; ++j) { - destPtr = destPtr0 + (i * scaledWidth + xx + j) * nComps; - *destPtr++ = (Guchar)pix[0]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[2]; - } - } - break; - case splashModeBGR8: - for (i = 0; i < yStep; ++i) { - for (j = 0; j < xStep; ++j) { - destPtr = destPtr0 + (i * scaledWidth + xx + j) * nComps; - *destPtr++ = (Guchar)pix[2]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[0]; - } - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - for (i = 0; i < yStep; ++i) { - for (j = 0; j < xStep; ++j) { - destPtr = destPtr0 + (i * scaledWidth + xx + j) * nComps; - *destPtr++ = (Guchar)pix[0]; - *destPtr++ = (Guchar)pix[1]; - *destPtr++ = (Guchar)pix[2]; - *destPtr++ = (Guchar)pix[3]; - } - } - break; -#endif - } - - // process alpha - if (srcAlpha) { - alpha = alphaLineBuf[x]; - for (i = 0; i < yStep; ++i) { - for (j = 0; j < xStep; ++j) { - destAlphaPtr = destAlphaPtr0 + i * scaledWidth + xx + j; - *destAlphaPtr = (Guchar)alpha; - } - } - } - - xx += xStep; - } - - destPtr0 += yStep * scaledWidth * nComps; - if (srcAlpha) { - destAlphaPtr0 += yStep * scaledWidth; - } - } - - gfree(alphaLineBuf); - gfree(lineBuf); -} - -void Splash::vertFlipImage(SplashBitmap *img, int width, int height, - int nComps) { - Guchar *lineBuf; - Guchar *p0, *p1; - int w; - - w = width * nComps; - lineBuf = (Guchar *)gmalloc(w); - for (p0 = img->data, p1 = img->data + (height - 1) * w; - p0 < p1; - p0 += w, p1 -= w) { - memcpy(lineBuf, p0, w); - memcpy(p0, p1, w); - memcpy(p1, lineBuf, w); - } - if (img->alpha) { - for (p0 = img->alpha, p1 = img->alpha + (height - 1) * width; - p0 < p1; - p0 += width, p1 -= width) { - memcpy(lineBuf, p0, width); - memcpy(p0, p1, width); - memcpy(p1, lineBuf, width); - } - } - gfree(lineBuf); -} - -void Splash::blitImage(SplashBitmap *src, GBool srcAlpha, int xDest, int yDest, - SplashClipResult clipRes) { - SplashPipe pipe; - SplashColor pixel; - Guchar *ap; - int w, h, x0, y0, x1, y1, x, y; - - // split the image into clipped and unclipped regions - w = src->getWidth(); - h = src->getHeight(); - if (clipRes == splashClipAllInside) { - x0 = 0; - y0 = 0; - x1 = w; - y1 = h; - } else { - if (state->clip->getNumPaths()) { - x0 = x1 = w; - y0 = y1 = h; - } else { - if ((x0 = splashCeil(state->clip->getXMin()) - xDest) < 0) { - x0 = 0; - } - if ((y0 = splashCeil(state->clip->getYMin()) - yDest) < 0) { - y0 = 0; - } - if ((x1 = splashFloor(state->clip->getXMax()) - xDest) > w) { - x1 = w; - } - if (x1 < x0) { - x1 = x0; - } - if ((y1 = splashFloor(state->clip->getYMax()) - yDest) > h) { - y1 = h; - } - if (y1 < y0) { - y1 = y0; - } - } - } - - // draw the unclipped region - if (x0 < w && y0 < h && x0 < x1 && y0 < y1) { - pipeInit(&pipe, xDest + x0, yDest + y0, NULL, pixel, - (Guchar)splashRound(state->fillAlpha * 255), srcAlpha, gFalse); - if (srcAlpha) { - for (y = y0; y < y1; ++y) { - pipeSetXY(&pipe, xDest + x0, yDest + y); - ap = src->getAlphaPtr() + y * w + x0; - for (x = x0; x < x1; ++x) { - src->getPixel(x, y, pixel); - pipe.shape = *ap++; - (this->*pipe.run)(&pipe); - } - } - } else { - for (y = y0; y < y1; ++y) { - pipeSetXY(&pipe, xDest + x0, yDest + y); - for (x = x0; x < x1; ++x) { - src->getPixel(x, y, pixel); - (this->*pipe.run)(&pipe); - } - } - } - updateModX(xDest + x0); - updateModX(xDest + x1 - 1); - updateModY(yDest + y0); - updateModY(yDest + y1 - 1); - } - - // draw the clipped regions - if (y0 > 0) { - blitImageClipped(src, srcAlpha, 0, 0, xDest, yDest, w, y0); - } - if (y1 < h) { - blitImageClipped(src, srcAlpha, 0, y1, xDest, yDest + y1, w, h - y1); - } - if (x0 > 0 && y0 < y1) { - blitImageClipped(src, srcAlpha, 0, y0, xDest, yDest + y0, x0, y1 - y0); - } - if (x1 < w && y0 < y1) { - blitImageClipped(src, srcAlpha, x1, y0, xDest + x1, yDest + y0, - w - x1, y1 - y0); - } -} - -void Splash::blitImageClipped(SplashBitmap *src, GBool srcAlpha, - int xSrc, int ySrc, int xDest, int yDest, - int w, int h) { - SplashPipe pipe; - SplashColor pixel; - Guchar *ap; - int x, y; - - if (vectorAntialias) { - pipeInit(&pipe, xDest, yDest, NULL, pixel, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, gFalse); - drawAAPixelInit(); - if (srcAlpha) { - for (y = 0; y < h; ++y) { - ap = src->getAlphaPtr() + (ySrc + y) * src->getWidth() + xSrc; - for (x = 0; x < w; ++x) { - src->getPixel(xSrc + x, ySrc + y, pixel); - pipe.shape = *ap++; - drawAAPixel(&pipe, xDest + x, yDest + y); - } - } - } else { - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - src->getPixel(xSrc + x, ySrc + y, pixel); - pipe.shape = 255; - drawAAPixel(&pipe, xDest + x, yDest + y); - } - } - } - } else { - pipeInit(&pipe, xDest, yDest, NULL, pixel, - (Guchar)splashRound(state->fillAlpha * 255), srcAlpha, gFalse); - if (srcAlpha) { - for (y = 0; y < h; ++y) { - ap = src->getAlphaPtr() + (ySrc + y) * src->getWidth() + xSrc; - pipeSetXY(&pipe, xDest, yDest + y); - for (x = 0; x < w; ++x) { - if (state->clip->test(xDest + x, yDest + y)) { - src->getPixel(xSrc + x, ySrc + y, pixel); - pipe.shape = *ap++; - (this->*pipe.run)(&pipe); - updateModX(xDest + x); - updateModY(yDest + y); - } else { - pipeIncX(&pipe); - ++ap; - } - } - } - } else { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - for (x = 0; x < w; ++x) { - if (state->clip->test(xDest + x, yDest + y)) { - src->getPixel(xSrc + x, ySrc + y, pixel); - (this->*pipe.run)(&pipe); - updateModX(xDest + x); - updateModY(yDest + y); - } else { - pipeIncX(&pipe); - } - } - } - } - } -} - -SplashError Splash::composite(SplashBitmap *src, int xSrc, int ySrc, - int xDest, int yDest, int w, int h, - GBool noClip, GBool nonIsolated) { - SplashPipe pipe; - SplashColor pixel; - Guchar alpha; - Guchar *ap; - int x, y; - - if (src->mode != bitmap->mode) { - return splashErrModeMismatch; - } - - if (src->alpha) { - pipeInit(&pipe, xDest, yDest, NULL, pixel, - (Guchar)splashRound(state->fillAlpha * 255), gTrue, nonIsolated); - if (noClip) { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - ap = src->getAlphaPtr() + (ySrc + y) * src->getWidth() + xSrc; - for (x = 0; x < w; ++x) { - src->getPixel(xSrc + x, ySrc + y, pixel); - alpha = *ap++; - // this uses shape instead of alpha, which isn't technically - // correct, but works out the same - pipe.shape = alpha; - (this->*pipe.run)(&pipe); - } - } - updateModX(xDest); - updateModX(xDest + w - 1); - updateModY(yDest); - updateModY(yDest + h - 1); - } else { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - ap = src->getAlphaPtr() + (ySrc + y) * src->getWidth() + xSrc; - for (x = 0; x < w; ++x) { - src->getPixel(xSrc + x, ySrc + y, pixel); - alpha = *ap++; - if (state->clip->test(xDest + x, yDest + y)) { - // this uses shape instead of alpha, which isn't technically - // correct, but works out the same - pipe.shape = alpha; - (this->*pipe.run)(&pipe); - updateModX(xDest + x); - updateModY(yDest + y); - } else { - pipeIncX(&pipe); - } - } - } - } - } else { - pipeInit(&pipe, xDest, yDest, NULL, pixel, - (Guchar)splashRound(state->fillAlpha * 255), gFalse, nonIsolated); - if (noClip) { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - for (x = 0; x < w; ++x) { - src->getPixel(xSrc + x, ySrc + y, pixel); - (this->*pipe.run)(&pipe); - } - } - updateModX(xDest); - updateModX(xDest + w - 1); - updateModY(yDest); - updateModY(yDest + h - 1); - } else { - for (y = 0; y < h; ++y) { - pipeSetXY(&pipe, xDest, yDest + y); - for (x = 0; x < w; ++x) { - src->getPixel(xSrc + x, ySrc + y, pixel); - if (state->clip->test(xDest + x, yDest + y)) { - (this->*pipe.run)(&pipe); - updateModX(xDest + x); - updateModY(yDest + y); - } else { - pipeIncX(&pipe); - } - } - } - } - } - - return splashOk; -} - -void Splash::compositeBackground(SplashColorPtr color) { - SplashColorPtr p; - Guchar *q; - Guchar alpha, alpha1, c, color0, color1, color2; -#if SPLASH_CMYK - Guchar color3; -#endif - int x, y, mask; - - switch (bitmap->mode) { - case splashModeMono1: - color0 = color[0]; - for (y = 0; y < bitmap->height; ++y) { - p = &bitmap->data[y * bitmap->rowSize]; - q = &bitmap->alpha[y * bitmap->width]; - mask = 0x80; - for (x = 0; x < bitmap->width; ++x) { - alpha = *q++; - alpha1 = 255 - alpha; - c = (*p & mask) ? 0xff : 0x00; - c = div255(alpha1 * color0 + alpha * c); - if (c & 0x80) { - *p |= mask; - } else { - *p &= ~mask; - } - if (!(mask >>= 1)) { - mask = 0x80; - ++p; - } - } - } - break; - case splashModeMono8: - color0 = color[0]; - for (y = 0; y < bitmap->height; ++y) { - p = &bitmap->data[y * bitmap->rowSize]; - q = &bitmap->alpha[y * bitmap->width]; - for (x = 0; x < bitmap->width; ++x) { - alpha = *q++; - alpha1 = 255 - alpha; - p[0] = div255(alpha1 * color0 + alpha * p[0]); - ++p; - } - } - break; - case splashModeRGB8: - case splashModeBGR8: - color0 = color[0]; - color1 = color[1]; - color2 = color[2]; - for (y = 0; y < bitmap->height; ++y) { - p = &bitmap->data[y * bitmap->rowSize]; - q = &bitmap->alpha[y * bitmap->width]; - for (x = 0; x < bitmap->width; ++x) { - alpha = *q++; - alpha1 = 255 - alpha; - p[0] = div255(alpha1 * color0 + alpha * p[0]); - p[1] = div255(alpha1 * color1 + alpha * p[1]); - p[2] = div255(alpha1 * color2 + alpha * p[2]); - p += 3; - } - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - color0 = color[0]; - color1 = color[1]; - color2 = color[2]; - color3 = color[3]; - for (y = 0; y < bitmap->height; ++y) { - p = &bitmap->data[y * bitmap->rowSize]; - q = &bitmap->alpha[y * bitmap->width]; - for (x = 0; x < bitmap->width; ++x) { - alpha = *q++; - alpha1 = 255 - alpha; - p[0] = div255(alpha1 * color0 + alpha * p[0]); - p[1] = div255(alpha1 * color1 + alpha * p[1]); - p[2] = div255(alpha1 * color2 + alpha * p[2]); - p[3] = div255(alpha1 * color3 + alpha * p[3]); - p += 4; - } - } - break; -#endif - } - memset(bitmap->alpha, 255, bitmap->width * bitmap->height); -} - -SplashError Splash::blitTransparent(SplashBitmap *src, int xSrc, int ySrc, - int xDest, int yDest, int w, int h) { - SplashColorPtr p, q; - int x, y, mask, srcMask; - - if (src->mode != bitmap->mode) { - return splashErrModeMismatch; - } - - switch (bitmap->mode) { - case splashModeMono1: - for (y = 0; y < h; ++y) { - p = &bitmap->data[(yDest + y) * bitmap->rowSize + (xDest >> 3)]; - mask = 0x80 >> (xDest & 7); - q = &src->data[(ySrc + y) * src->rowSize + (xSrc >> 3)]; - srcMask = 0x80 >> (xSrc & 7); - for (x = 0; x < w; ++x) { - if (*q & srcMask) { - *p |= mask; - } else { - *p &= ~mask; - } - if (!(mask >>= 1)) { - mask = 0x80; - ++p; - } - if (!(srcMask >>= 1)) { - srcMask = 0x80; - ++q; - } - } - } - break; - case splashModeMono8: - for (y = 0; y < h; ++y) { - p = &bitmap->data[(yDest + y) * bitmap->rowSize + xDest]; - q = &src->data[(ySrc + y) * src->rowSize + xSrc]; - for (x = 0; x < w; ++x) { - *p++ = *q++; - } - } - break; - case splashModeRGB8: - case splashModeBGR8: - for (y = 0; y < h; ++y) { - p = &bitmap->data[(yDest + y) * bitmap->rowSize + 3 * xDest]; - q = &src->data[(ySrc + y) * src->rowSize + 3 * xSrc]; - for (x = 0; x < w; ++x) { - *p++ = *q++; - *p++ = *q++; - *p++ = *q++; - } - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - for (y = 0; y < h; ++y) { - p = &bitmap->data[(yDest + y) * bitmap->rowSize + 4 * xDest]; - q = &src->data[(ySrc + y) * src->rowSize + 4 * xSrc]; - for (x = 0; x < w; ++x) { - *p++ = *q++; - *p++ = *q++; - *p++ = *q++; - *p++ = *q++; - } - } - break; -#endif - } - - if (bitmap->alpha) { - for (y = 0; y < h; ++y) { - q = &bitmap->alpha[(yDest + y) * bitmap->width + xDest]; - for (x = 0; x < w; ++x) { - *q++ = 0x00; - } - } - } - - return splashOk; -} - -SplashPath *Splash::makeStrokePath(SplashPath *path, GBool flatten) { - SplashPath *pathIn, *dashPath, *pathOut; - SplashCoord w, d, dx, dy, wdx, wdy, dxNext, dyNext, wdxNext, wdyNext; - SplashCoord crossprod, dotprod, miter, m; - GBool first, last, closed; - int subpathStart0, subpathStart1, seg, i0, i1, j0, j1, k0, k1; - int left0, left1, left2, right0, right1, right2, join0, join1, join2; - int leftFirst, rightFirst, firstPt; - - pathOut = new SplashPath(); - - if (path->length == 0) { - return pathOut; - } - - if (flatten) { - pathIn = flattenPath(path, state->matrix, state->flatness); - if (state->lineDashLength > 0) { - dashPath = makeDashedPath(pathIn); - delete pathIn; - pathIn = dashPath; - } - } else { - pathIn = path; - } - - w = state->lineWidth; - - subpathStart0 = subpathStart1 = 0; // make gcc happy - seg = 0; // make gcc happy - closed = gFalse; // make gcc happy - left0 = left1 = right0 = right1 = join0 = join1 = 0; // make gcc happy - leftFirst = rightFirst = firstPt = 0; // make gcc happy - - i0 = 0; - for (i1 = i0; - !(pathIn->flags[i1] & splashPathLast) && - i1 + 1 < pathIn->length && - pathIn->pts[i1+1].x == pathIn->pts[i1].x && - pathIn->pts[i1+1].y == pathIn->pts[i1].y; - ++i1) ; - - while (i1 < pathIn->length) { - if ((first = pathIn->flags[i0] & splashPathFirst)) { - subpathStart0 = i0; - subpathStart1 = i1; - seg = 0; - closed = pathIn->flags[i0] & splashPathClosed; - } - j0 = i1 + 1; - if (j0 < pathIn->length) { - for (j1 = j0; - !(pathIn->flags[j1] & splashPathLast) && - j1 + 1 < pathIn->length && - pathIn->pts[j1+1].x == pathIn->pts[j1].x && - pathIn->pts[j1+1].y == pathIn->pts[j1].y; - ++j1) ; - } else { - j1 = j0; - } - if (pathIn->flags[i1] & splashPathLast) { - if (first && state->lineCap == splashLineCapRound) { - // special case: zero-length subpath with round line caps --> - // draw a circle - pathOut->moveTo(pathIn->pts[i0].x + (SplashCoord)0.5 * w, - pathIn->pts[i0].y); - pathOut->curveTo(pathIn->pts[i0].x + (SplashCoord)0.5 * w, - pathIn->pts[i0].y + bezierCircle2 * w, - pathIn->pts[i0].x + bezierCircle2 * w, - pathIn->pts[i0].y + (SplashCoord)0.5 * w, - pathIn->pts[i0].x, - pathIn->pts[i0].y + (SplashCoord)0.5 * w); - pathOut->curveTo(pathIn->pts[i0].x - bezierCircle2 * w, - pathIn->pts[i0].y + (SplashCoord)0.5 * w, - pathIn->pts[i0].x - (SplashCoord)0.5 * w, - pathIn->pts[i0].y + bezierCircle2 * w, - pathIn->pts[i0].x - (SplashCoord)0.5 * w, - pathIn->pts[i0].y); - pathOut->curveTo(pathIn->pts[i0].x - (SplashCoord)0.5 * w, - pathIn->pts[i0].y - bezierCircle2 * w, - pathIn->pts[i0].x - bezierCircle2 * w, - pathIn->pts[i0].y - (SplashCoord)0.5 * w, - pathIn->pts[i0].x, - pathIn->pts[i0].y - (SplashCoord)0.5 * w); - pathOut->curveTo(pathIn->pts[i0].x + bezierCircle2 * w, - pathIn->pts[i0].y - (SplashCoord)0.5 * w, - pathIn->pts[i0].x + (SplashCoord)0.5 * w, - pathIn->pts[i0].y - bezierCircle2 * w, - pathIn->pts[i0].x + (SplashCoord)0.5 * w, - pathIn->pts[i0].y); - pathOut->close(); - } - i0 = j0; - i1 = j1; - continue; - } - last = pathIn->flags[j1] & splashPathLast; - if (last) { - k0 = subpathStart1 + 1; - } else { - k0 = j1 + 1; - } - for (k1 = k0; - !(pathIn->flags[k1] & splashPathLast) && - k1 + 1 < pathIn->length && - pathIn->pts[k1+1].x == pathIn->pts[k1].x && - pathIn->pts[k1+1].y == pathIn->pts[k1].y; - ++k1) ; - - // compute the deltas for segment (i1, j0) - d = (SplashCoord)1 / splashDist(pathIn->pts[i1].x, pathIn->pts[i1].y, - pathIn->pts[j0].x, pathIn->pts[j0].y); - dx = d * (pathIn->pts[j0].x - pathIn->pts[i1].x); - dy = d * (pathIn->pts[j0].y - pathIn->pts[i1].y); - wdx = (SplashCoord)0.5 * w * dx; - wdy = (SplashCoord)0.5 * w * dy; - - // draw the start cap - pathOut->moveTo(pathIn->pts[i0].x - wdy, pathIn->pts[i0].y + wdx); - if (i0 == subpathStart0) { - firstPt = pathOut->length - 1; - } - if (first && !closed) { - switch (state->lineCap) { - case splashLineCapButt: - pathOut->lineTo(pathIn->pts[i0].x + wdy, pathIn->pts[i0].y - wdx); - break; - case splashLineCapRound: - pathOut->curveTo(pathIn->pts[i0].x - wdy - bezierCircle * wdx, - pathIn->pts[i0].y + wdx - bezierCircle * wdy, - pathIn->pts[i0].x - wdx - bezierCircle * wdy, - pathIn->pts[i0].y - wdy + bezierCircle * wdx, - pathIn->pts[i0].x - wdx, - pathIn->pts[i0].y - wdy); - pathOut->curveTo(pathIn->pts[i0].x - wdx + bezierCircle * wdy, - pathIn->pts[i0].y - wdy - bezierCircle * wdx, - pathIn->pts[i0].x + wdy - bezierCircle * wdx, - pathIn->pts[i0].y - wdx - bezierCircle * wdy, - pathIn->pts[i0].x + wdy, - pathIn->pts[i0].y - wdx); - break; - case splashLineCapProjecting: - pathOut->lineTo(pathIn->pts[i0].x - wdx - wdy, - pathIn->pts[i0].y + wdx - wdy); - pathOut->lineTo(pathIn->pts[i0].x - wdx + wdy, - pathIn->pts[i0].y - wdx - wdy); - pathOut->lineTo(pathIn->pts[i0].x + wdy, - pathIn->pts[i0].y - wdx); - break; - } - } else { - pathOut->lineTo(pathIn->pts[i0].x + wdy, pathIn->pts[i0].y - wdx); - } - - // draw the left side of the segment rectangle - left2 = pathOut->length - 1; - pathOut->lineTo(pathIn->pts[j0].x + wdy, pathIn->pts[j0].y - wdx); - - // draw the end cap - if (last && !closed) { - switch (state->lineCap) { - case splashLineCapButt: - pathOut->lineTo(pathIn->pts[j0].x - wdy, pathIn->pts[j0].y + wdx); - break; - case splashLineCapRound: - pathOut->curveTo(pathIn->pts[j0].x + wdy + bezierCircle * wdx, - pathIn->pts[j0].y - wdx + bezierCircle * wdy, - pathIn->pts[j0].x + wdx + bezierCircle * wdy, - pathIn->pts[j0].y + wdy - bezierCircle * wdx, - pathIn->pts[j0].x + wdx, - pathIn->pts[j0].y + wdy); - pathOut->curveTo(pathIn->pts[j0].x + wdx - bezierCircle * wdy, - pathIn->pts[j0].y + wdy + bezierCircle * wdx, - pathIn->pts[j0].x - wdy + bezierCircle * wdx, - pathIn->pts[j0].y + wdx + bezierCircle * wdy, - pathIn->pts[j0].x - wdy, - pathIn->pts[j0].y + wdx); - break; - case splashLineCapProjecting: - pathOut->lineTo(pathIn->pts[j0].x + wdy + wdx, - pathIn->pts[j0].y - wdx + wdy); - pathOut->lineTo(pathIn->pts[j0].x - wdy + wdx, - pathIn->pts[j0].y + wdx + wdy); - pathOut->lineTo(pathIn->pts[j0].x - wdy, - pathIn->pts[j0].y + wdx); - break; - } - } else { - pathOut->lineTo(pathIn->pts[j0].x - wdy, pathIn->pts[j0].y + wdx); - } - - // draw the right side of the segment rectangle - // (NB: if stroke adjustment is enabled, the closepath operation MUST - // add a segment because this segment is used for a hint) - right2 = pathOut->length - 1; - pathOut->close(state->strokeAdjust); - - // draw the join - join2 = pathOut->length; - if (!last || closed) { - - // compute the deltas for segment (j1, k0) - d = (SplashCoord)1 / splashDist(pathIn->pts[j1].x, pathIn->pts[j1].y, - pathIn->pts[k0].x, pathIn->pts[k0].y); - dxNext = d * (pathIn->pts[k0].x - pathIn->pts[j1].x); - dyNext = d * (pathIn->pts[k0].y - pathIn->pts[j1].y); - wdxNext = (SplashCoord)0.5 * w * dxNext; - wdyNext = (SplashCoord)0.5 * w * dyNext; - - // compute the join parameters - crossprod = dx * dyNext - dy * dxNext; - dotprod = -(dx * dxNext + dy * dyNext); - if (dotprod > 0.99999) { - // avoid a divide-by-zero -- set miter to something arbitrary - // such that sqrt(miter) will exceed miterLimit (and m is never - // used in that situation) - miter = (state->miterLimit + 1) * (state->miterLimit + 1); - m = 0; - } else { - miter = (SplashCoord)2 / ((SplashCoord)1 - dotprod); - if (miter < 1) { - // this can happen because of floating point inaccuracies - miter = 1; - } - m = splashSqrt(miter - 1); - } - - // round join - if (state->lineJoin == splashLineJoinRound) { - pathOut->moveTo(pathIn->pts[j0].x + (SplashCoord)0.5 * w, - pathIn->pts[j0].y); - pathOut->curveTo(pathIn->pts[j0].x + (SplashCoord)0.5 * w, - pathIn->pts[j0].y + bezierCircle2 * w, - pathIn->pts[j0].x + bezierCircle2 * w, - pathIn->pts[j0].y + (SplashCoord)0.5 * w, - pathIn->pts[j0].x, - pathIn->pts[j0].y + (SplashCoord)0.5 * w); - pathOut->curveTo(pathIn->pts[j0].x - bezierCircle2 * w, - pathIn->pts[j0].y + (SplashCoord)0.5 * w, - pathIn->pts[j0].x - (SplashCoord)0.5 * w, - pathIn->pts[j0].y + bezierCircle2 * w, - pathIn->pts[j0].x - (SplashCoord)0.5 * w, - pathIn->pts[j0].y); - pathOut->curveTo(pathIn->pts[j0].x - (SplashCoord)0.5 * w, - pathIn->pts[j0].y - bezierCircle2 * w, - pathIn->pts[j0].x - bezierCircle2 * w, - pathIn->pts[j0].y - (SplashCoord)0.5 * w, - pathIn->pts[j0].x, - pathIn->pts[j0].y - (SplashCoord)0.5 * w); - pathOut->curveTo(pathIn->pts[j0].x + bezierCircle2 * w, - pathIn->pts[j0].y - (SplashCoord)0.5 * w, - pathIn->pts[j0].x + (SplashCoord)0.5 * w, - pathIn->pts[j0].y - bezierCircle2 * w, - pathIn->pts[j0].x + (SplashCoord)0.5 * w, - pathIn->pts[j0].y); - - } else { - pathOut->moveTo(pathIn->pts[j0].x, pathIn->pts[j0].y); - - // angle < 180 - if (crossprod < 0) { - pathOut->lineTo(pathIn->pts[j0].x - wdyNext, - pathIn->pts[j0].y + wdxNext); - // miter join inside limit - if (state->lineJoin == splashLineJoinMiter && - splashSqrt(miter) <= state->miterLimit) { - pathOut->lineTo(pathIn->pts[j0].x - wdy + wdx * m, - pathIn->pts[j0].y + wdx + wdy * m); - pathOut->lineTo(pathIn->pts[j0].x - wdy, - pathIn->pts[j0].y + wdx); - // bevel join or miter join outside limit - } else { - pathOut->lineTo(pathIn->pts[j0].x - wdy, - pathIn->pts[j0].y + wdx); - } - - // angle >= 180 - } else { - pathOut->lineTo(pathIn->pts[j0].x + wdy, - pathIn->pts[j0].y - wdx); - // miter join inside limit - if (state->lineJoin == splashLineJoinMiter && - splashSqrt(miter) <= state->miterLimit) { - pathOut->lineTo(pathIn->pts[j0].x + wdy + wdx * m, - pathIn->pts[j0].y - wdx + wdy * m); - pathOut->lineTo(pathIn->pts[j0].x + wdyNext, - pathIn->pts[j0].y - wdxNext); - // bevel join or miter join outside limit - } else { - pathOut->lineTo(pathIn->pts[j0].x + wdyNext, - pathIn->pts[j0].y - wdxNext); - } - } - } - - pathOut->close(); - } - - // add stroke adjustment hints - if (state->strokeAdjust) { - if (seg >= 1) { - if (seg >= 2) { - pathOut->addStrokeAdjustHint(left1, right1, left0 + 1, right0); - pathOut->addStrokeAdjustHint(left1, right1, join0, left2); - } else { - pathOut->addStrokeAdjustHint(left1, right1, firstPt, left2); - } - pathOut->addStrokeAdjustHint(left1, right1, right2 + 1, right2 + 1); - } - left0 = left1; - left1 = left2; - right0 = right1; - right1 = right2; - join0 = join1; - join1 = join2; - if (seg == 0) { - leftFirst = left2; - rightFirst = right2; - } - if (last) { - if (seg >= 2) { - pathOut->addStrokeAdjustHint(left1, right1, left0 + 1, right0); - pathOut->addStrokeAdjustHint(left1, right1, - join0, pathOut->length - 1); - } else { - pathOut->addStrokeAdjustHint(left1, right1, - firstPt, pathOut->length - 1); - } - if (closed) { - pathOut->addStrokeAdjustHint(left1, right1, firstPt, leftFirst); - pathOut->addStrokeAdjustHint(left1, right1, - rightFirst + 1, rightFirst + 1); - pathOut->addStrokeAdjustHint(leftFirst, rightFirst, - left1 + 1, right1); - pathOut->addStrokeAdjustHint(leftFirst, rightFirst, - join1, pathOut->length - 1); - } - } - } - - i0 = j0; - i1 = j1; - ++seg; - } - - if (pathIn != path) { - delete pathIn; - } - - return pathOut; -} - -void Splash::dumpPath(SplashPath *path) { - int i; - - for (i = 0; i < path->length; ++i) { - printf(" %3d: x=%8.2f y=%8.2f%s%s%s%s\n", - i, (double)path->pts[i].x, (double)path->pts[i].y, - (path->flags[i] & splashPathFirst) ? " first" : "", - (path->flags[i] & splashPathLast) ? " last" : "", - (path->flags[i] & splashPathClosed) ? " closed" : "", - (path->flags[i] & splashPathCurve) ? " curve" : ""); - } -} - -void Splash::dumpXPath(SplashXPath *path) { - int i; - - for (i = 0; i < path->length; ++i) { - printf(" %4d: x0=%8.2f y0=%8.2f x1=%8.2f y1=%8.2f %s%s%s%s%s%s%s\n", - i, (double)path->segs[i].x0, (double)path->segs[i].y0, - (double)path->segs[i].x1, (double)path->segs[i].y1, - (path->segs[i].flags & splashXPathFirst) ? "F" : " ", - (path->segs[i].flags & splashXPathLast) ? "L" : " ", - (path->segs[i].flags & splashXPathEnd0) ? "0" : " ", - (path->segs[i].flags & splashXPathEnd1) ? "1" : " ", - (path->segs[i].flags & splashXPathHoriz) ? "H" : " ", - (path->segs[i].flags & splashXPathVert) ? "V" : " ", - (path->segs[i].flags & splashXPathFlip) ? "P" : " "); - } -} diff --git a/thirdparty/xpdf/3.02/src/splash/Splash.h b/thirdparty/xpdf/3.02/src/splash/Splash.h deleted file mode 100644 index 4d32f149..00000000 --- a/thirdparty/xpdf/3.02/src/splash/Splash.h +++ /dev/null @@ -1,371 +0,0 @@ -//======================================================================== -// -// Splash.h -// -//======================================================================== - -#ifndef SPLASH_H -#define SPLASH_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" -#include "SplashClip.h" - -class Splash; -class SplashBitmap; -struct SplashGlyphBitmap; -class SplashState; -class SplashPattern; -class SplashScreen; -class SplashPath; -class SplashXPath; -class SplashFont; -struct SplashPipe; - -//------------------------------------------------------------------------ - -// Retrieves the next line of pixels in an image mask. Normally, -// fills in * and returns true. If the image stream is -// exhausted, returns false. -typedef GBool (*SplashImageMaskSource)(void *data, SplashColorPtr pixel); - -// Retrieves the next line of pixels in an image. Normally, fills in -// * and returns true. If the image stream is exhausted, -// returns false. -typedef GBool (*SplashImageSource)(void *data, SplashColorPtr colorLine, - Guchar *alphaLine); - -//------------------------------------------------------------------------ - -enum SplashPipeResultColorCtrl { - splashPipeResultColorNoAlphaBlendMono, - splashPipeResultColorNoAlphaBlendRGB, -#if SPLASH_CMYK - splashPipeResultColorNoAlphaBlendCMYK, -#endif - splashPipeResultColorAlphaNoBlendMono, - splashPipeResultColorAlphaNoBlendRGB, -#if SPLASH_CMYK - splashPipeResultColorAlphaNoBlendCMYK, -#endif - splashPipeResultColorAlphaBlendMono, - splashPipeResultColorAlphaBlendRGB -#if SPLASH_CMYK - , - splashPipeResultColorAlphaBlendCMYK -#endif -}; - -//------------------------------------------------------------------------ -// Splash -//------------------------------------------------------------------------ - -class Splash { -public: - - // Create a new rasterizer object. - Splash(SplashBitmap *bitmapA, GBool vectorAntialiasA, - SplashScreenParams *screenParams = NULL); - Splash(SplashBitmap *bitmapA, GBool vectorAntialiasA, - SplashScreen *screenA); - - ~Splash(); - - //----- state read - - SplashCoord *getMatrix(); - SplashPattern *getStrokePattern(); - SplashPattern *getFillPattern(); - SplashScreen *getScreen(); - SplashBlendFunc getBlendFunc(); - SplashCoord getStrokeAlpha(); - SplashCoord getFillAlpha(); - SplashCoord getLineWidth(); - int getLineCap(); - int getLineJoin(); - SplashCoord getMiterLimit(); - SplashCoord getFlatness(); - SplashCoord *getLineDash(); - int getLineDashLength(); - SplashCoord getLineDashPhase(); - GBool getStrokeAdjust(); - SplashClip *getClip(); - SplashBitmap *getSoftMask(); - GBool getInNonIsolatedGroup(); - - //----- state write - - void setMatrix(SplashCoord *matrix); - void setStrokePattern(SplashPattern *strokeColor); - void setFillPattern(SplashPattern *fillColor); - void setScreen(SplashScreen *screen); - void setBlendFunc(SplashBlendFunc func); - void setStrokeAlpha(SplashCoord alpha); - void setFillAlpha(SplashCoord alpha); - void setLineWidth(SplashCoord lineWidth); - void setLineCap(int lineCap); - void setLineJoin(int lineJoin); - void setMiterLimit(SplashCoord miterLimit); - void setFlatness(SplashCoord flatness); - // the array will be copied - void setLineDash(SplashCoord *lineDash, int lineDashLength, - SplashCoord lineDashPhase); - void setStrokeAdjust(GBool strokeAdjust); - // NB: uses transformed coordinates. - void clipResetToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1); - // NB: uses transformed coordinates. - SplashError clipToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1); - // NB: uses untransformed coordinates. - SplashError clipToPath(SplashPath *path, GBool eo); - void setSoftMask(SplashBitmap *softMask); - void setInNonIsolatedGroup(SplashBitmap *alpha0BitmapA, - int alpha0XA, int alpha0YA); - void setOverprintMask(Guint overprintMask); - - - //----- state save/restore - - void saveState(); - SplashError restoreState(); - - //----- drawing operations - - // Fill the bitmap with . This is not subject to clipping. - void clear(SplashColorPtr color, Guchar alpha = 0x00); - - // Stroke a path using the current stroke pattern. - SplashError stroke(SplashPath *path); - - // Fill a path using the current fill pattern. - SplashError fill(SplashPath *path, GBool eo); - - // Fill a path, XORing with the current fill pattern. - SplashError xorFill(SplashPath *path, GBool eo); - - // Draw a character, using the current fill pattern. - SplashError fillChar(SplashCoord x, SplashCoord y, int c, SplashFont *font); - - // Draw a glyph, using the current fill pattern. This function does - // not free any data, i.e., it ignores glyph->freeData. - SplashError fillGlyph(SplashCoord x, SplashCoord y, - SplashGlyphBitmap *glyph); - - // Draws an image mask using the fill color. This will read - // lines of pixels from , starting with the top line. "1" - // pixels will be drawn with the current fill color; "0" pixels are - // transparent. The matrix: - // [ mat[0] mat[1] 0 ] - // [ mat[2] mat[3] 0 ] - // [ mat[4] mat[5] 1 ] - // maps a unit square to the desired destination for the image, in - // PostScript style: - // [x' y' 1] = [x y 1] * mat - // Note that the Splash y axis points downward, and the image source - // is assumed to produce pixels in raster order, starting from the - // top line. - SplashError fillImageMask(SplashImageMaskSource src, void *srcData, - int w, int h, SplashCoord *mat, - GBool glyphMode); - - // Draw an image. This will read lines of pixels from - // , starting with the top line. These pixels are assumed to - // be in the source mode, . If is true, the - // alpha values returned by are used; otherwise they are - // ignored. The following combinations of source and target modes - // are supported: - // source target - // ------ ------ - // Mono1 Mono1 - // Mono8 Mono1 -- with dithering - // Mono8 Mono8 - // RGB8 RGB8 - // BGR8 BGR8 - // CMYK8 CMYK8 - // The matrix behaves as for fillImageMask. - SplashError drawImage(SplashImageSource src, void *srcData, - SplashColorMode srcMode, GBool srcAlpha, - int w, int h, SplashCoord *mat); - - // Composite a rectangular region from onto this Splash - // object. - SplashError composite(SplashBitmap *src, int xSrc, int ySrc, - int xDest, int yDest, int w, int h, - GBool noClip, GBool nonIsolated); - - // Composite this Splash object onto a background color. The - // background alpha is assumed to be 1. - void compositeBackground(SplashColorPtr color); - - // Copy a rectangular region from onto the bitmap belonging to - // this Splash object. The destination alpha values are all set to - // zero. - SplashError blitTransparent(SplashBitmap *src, int xSrc, int ySrc, - int xDest, int yDest, int w, int h); - - //----- misc - - // Construct a path for a stroke, given the path to be stroked, and - // using the current line parameters. If is true, this - // function will first flatten the path and handle the linedash. - SplashPath *makeStrokePath(SplashPath *path, GBool flatten = gTrue); - - // Return the associated bitmap. - SplashBitmap *getBitmap() { return bitmap; } - - // Get a bounding box which includes all modifications since the - // last call to clearModRegion. - void getModRegion(int *xMin, int *yMin, int *xMax, int *yMax) - { *xMin = modXMin; *yMin = modYMin; *xMax = modXMax; *yMax = modYMax; } - - // Clear the modified region bounding box. - void clearModRegion(); - - // Get clipping status for the last drawing operation subject to - // clipping. - SplashClipResult getClipRes() { return opClipRes; } - - // Toggle debug mode on or off. - void setDebugMode(GBool debugModeA) { debugMode = debugModeA; } - -#if 1 //~tmp: turn off anti-aliasing temporarily - void setInShading(GBool sh) { inShading = sh; } -#endif - -private: - - void pipeInit(SplashPipe *pipe, int x, int y, - SplashPattern *pattern, SplashColorPtr cSrc, - Guchar aInput, GBool usesShape, - GBool nonIsolatedGroup); - void pipeRun(SplashPipe *pipe); - void pipeRunSimpleMono1(SplashPipe *pipe); - void pipeRunSimpleMono8(SplashPipe *pipe); - void pipeRunSimpleRGB8(SplashPipe *pipe); - void pipeRunSimpleBGR8(SplashPipe *pipe); -#if SPLASH_CMYK - void pipeRunSimpleCMYK8(SplashPipe *pipe); -#endif - void pipeRunAAMono1(SplashPipe *pipe); - void pipeRunAAMono8(SplashPipe *pipe); - void pipeRunAARGB8(SplashPipe *pipe); - void pipeRunAABGR8(SplashPipe *pipe); -#if SPLASH_CMYK - void pipeRunAACMYK8(SplashPipe *pipe); -#endif - void pipeSetXY(SplashPipe *pipe, int x, int y); - void pipeIncX(SplashPipe *pipe); - void drawPixel(SplashPipe *pipe, int x, int y, GBool noClip); - void drawAAPixelInit(); - void drawAAPixel(SplashPipe *pipe, int x, int y); - void drawSpan(SplashPipe *pipe, int x0, int x1, int y, GBool noClip); - void drawAALine(SplashPipe *pipe, int x0, int x1, int y); - void transform(SplashCoord *matrix, SplashCoord xi, SplashCoord yi, - SplashCoord *xo, SplashCoord *yo); - void updateModX(int x); - void updateModY(int y); - void strokeNarrow(SplashPath *path); - void strokeWide(SplashPath *path); - SplashPath *flattenPath(SplashPath *path, SplashCoord *matrix, - SplashCoord flatness); - void flattenCurve(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - SplashCoord x2, SplashCoord y2, - SplashCoord x3, SplashCoord y3, - SplashCoord *matrix, SplashCoord flatness2, - SplashPath *fPath); - SplashPath *makeDashedPath(SplashPath *xPath); - SplashError fillWithPattern(SplashPath *path, GBool eo, - SplashPattern *pattern, SplashCoord alpha); - GBool pathAllOutside(SplashPath *path); - SplashError fillGlyph2(int x0, int y0, SplashGlyphBitmap *glyph); - void arbitraryTransformMask(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - SplashCoord *mat, GBool glyphMode); - SplashBitmap *scaleMask(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight); - void scaleMaskYdXd(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void scaleMaskYdXu(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void scaleMaskYuXd(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void scaleMaskYuXu(SplashImageMaskSource src, void *srcData, - int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void blitMask(SplashBitmap *src, int xDest, int yDest, - SplashClipResult clipRes); - void arbitraryTransformImage(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, - int srcWidth, int srcHeight, - SplashCoord *mat); - SplashBitmap *scaleImage(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight); - void scaleImageYdXd(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void scaleImageYdXu(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void scaleImageYuXd(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void scaleImageYuXu(SplashImageSource src, void *srcData, - SplashColorMode srcMode, int nComps, - GBool srcAlpha, int srcWidth, int srcHeight, - int scaledWidth, int scaledHeight, - SplashBitmap *dest); - void vertFlipImage(SplashBitmap *img, int width, int height, - int nComps); - void blitImage(SplashBitmap *src, GBool srcAlpha, int xDest, int yDest, - SplashClipResult clipRes); - void blitImageClipped(SplashBitmap *src, GBool srcAlpha, - int xSrc, int ySrc, int xDest, int yDest, - int w, int h); - void dumpPath(SplashPath *path); - void dumpXPath(SplashXPath *path); - - static SplashPipeResultColorCtrl pipeResultColorNoAlphaBlend[]; - static SplashPipeResultColorCtrl pipeResultColorAlphaNoBlend[]; - static SplashPipeResultColorCtrl pipeResultColorAlphaBlend[]; - static int pipeNonIsoGroupCorrection[]; - - SplashBitmap *bitmap; - SplashState *state; - SplashBitmap *aaBuf; - int aaBufY; - SplashBitmap *alpha0Bitmap; // for non-isolated groups, this is the - // bitmap containing the alpha0 values - int alpha0X, alpha0Y; // offset within alpha0Bitmap - Guchar aaGamma[splashAASize * splashAASize + 1]; - int modXMin, modYMin, modXMax, modYMax; - SplashClipResult opClipRes; - GBool vectorAntialias; - GBool inShading; - GBool debugMode; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashBitmap.cc b/thirdparty/xpdf/3.02/src/splash/SplashBitmap.cc deleted file mode 100644 index 9fc7b04d..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashBitmap.cc +++ /dev/null @@ -1,229 +0,0 @@ -//======================================================================== -// -// SplashBitmap.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "SplashErrorCodes.h" -#include "SplashBitmap.h" - -//------------------------------------------------------------------------ -// SplashBitmap -//------------------------------------------------------------------------ - -SplashBitmap::SplashBitmap(int widthA, int heightA, int rowPad, - SplashColorMode modeA, GBool alphaA, - GBool topDown) { - width = widthA; - height = heightA; - mode = modeA; - switch (mode) { - case splashModeMono1: - if (width > 0) { - rowSize = (width + 7) >> 3; - } else { - rowSize = -1; - } - break; - case splashModeMono8: - if (width > 0) { - rowSize = width; - } else { - rowSize = -1; - } - break; - case splashModeRGB8: - case splashModeBGR8: - if (width > 0 && width <= INT_MAX / 3) { - rowSize = width * 3; - } else { - rowSize = -1; - } - break; -#if SPLASH_CMYK - case splashModeCMYK8: - if (width > 0 && width <= INT_MAX / 4) { - rowSize = width * 4; - } else { - rowSize = -1; - } - break; -#endif - } - if (rowSize > 0) { - rowSize += rowPad - 1; - rowSize -= rowSize % rowPad; - } - data = (SplashColorPtr)gmallocn(height, rowSize); - if (!topDown) { - data += (height - 1) * rowSize; - rowSize = -rowSize; - } - if (alphaA) { - alpha = (Guchar *)gmallocn(width, height); - } else { - alpha = NULL; - } -} - -SplashBitmap::~SplashBitmap() { - if (data) { - if (rowSize < 0) { - gfree(data + (height - 1) * rowSize); - } else { - gfree(data); - } - } - gfree(alpha); -} - -SplashError SplashBitmap::writePNMFile(char *fileName) { - FILE *f; - SplashError err; - - if (!(f = fopen(fileName, "wb"))) { - return splashErrOpenFile; - } - err = writePNMFile(f); - fclose(f); - return err; -} - -SplashError SplashBitmap::writePNMFile(FILE *f) { - SplashColorPtr row, p; - int x, y; - - switch (mode) { - - case splashModeMono1: - fprintf(f, "P4\n%d %d\n", width, height); - row = data; - for (y = 0; y < height; ++y) { - p = row; - for (x = 0; x < width; x += 8) { - fputc(*p ^ 0xff, f); - ++p; - } - row += rowSize; - } - break; - - case splashModeMono8: - fprintf(f, "P5\n%d %d\n255\n", width, height); - row = data; - for (y = 0; y < height; ++y) { - fwrite(row, 1, width, f); - row += rowSize; - } - break; - - case splashModeRGB8: - fprintf(f, "P6\n%d %d\n255\n", width, height); - row = data; - for (y = 0; y < height; ++y) { - fwrite(row, 1, 3 * width, f); - row += rowSize; - } - break; - - case splashModeBGR8: - fprintf(f, "P6\n%d %d\n255\n", width, height); - row = data; - for (y = 0; y < height; ++y) { - p = row; - for (x = 0; x < width; ++x) { - fputc(splashBGR8R(p), f); - fputc(splashBGR8G(p), f); - fputc(splashBGR8B(p), f); - p += 3; - } - row += rowSize; - } - break; - -#if SPLASH_CMYK - case splashModeCMYK8: - // PNM doesn't support CMYK - break; -#endif - - } - - return splashOk; -} - -SplashError SplashBitmap::writeAlphaPGMFile(char *fileName) { - FILE *f; - - if (!alpha) { - return splashErrModeMismatch; - } - if (!(f = fopen(fileName, "wb"))) { - return splashErrOpenFile; - } - fprintf(f, "P5\n%d %d\n255\n", width, height); - fwrite(alpha, 1, width * height, f); - fclose(f); - return splashOk; -} - - -void SplashBitmap::getPixel(int x, int y, SplashColorPtr pixel) { - SplashColorPtr p; - - if (y < 0 || y >= height || x < 0 || x >= width) { - return; - } - switch (mode) { - case splashModeMono1: - p = &data[y * rowSize + (x >> 3)]; - pixel[0] = (p[0] & (0x80 >> (x & 7))) ? 0xff : 0x00; - break; - case splashModeMono8: - p = &data[y * rowSize + x]; - pixel[0] = p[0]; - break; - case splashModeRGB8: - p = &data[y * rowSize + 3 * x]; - pixel[0] = p[0]; - pixel[1] = p[1]; - pixel[2] = p[2]; - break; - case splashModeBGR8: - p = &data[y * rowSize + 3 * x]; - pixel[0] = p[2]; - pixel[1] = p[1]; - pixel[2] = p[0]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - p = &data[y * rowSize + 4 * x]; - pixel[0] = p[0]; - pixel[1] = p[1]; - pixel[2] = p[2]; - pixel[3] = p[3]; - break; -#endif - } -} - -Guchar SplashBitmap::getAlpha(int x, int y) { - return alpha[y * width + x]; -} - -SplashColorPtr SplashBitmap::takeData() { - SplashColorPtr data2; - - data2 = data; - data = NULL; - return data2; -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashBitmap.h b/thirdparty/xpdf/3.02/src/splash/SplashBitmap.h deleted file mode 100644 index 78f37d6e..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashBitmap.h +++ /dev/null @@ -1,69 +0,0 @@ -//======================================================================== -// -// SplashBitmap.h -// -//======================================================================== - -#ifndef SPLASHBITMAP_H -#define SPLASHBITMAP_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "SplashTypes.h" - -//------------------------------------------------------------------------ -// SplashBitmap -//------------------------------------------------------------------------ - -class SplashBitmap { -public: - - // Create a new bitmap. It will have x pixels in - // color mode . Rows will be padded out to a multiple of - // bytes. If is false, the bitmap will be stored - // upside-down, i.e., with the last row first in memory. - SplashBitmap(int widthA, int heightA, int rowPad, - SplashColorMode modeA, GBool alphaA, - GBool topDown = gTrue); - - ~SplashBitmap(); - - int getWidth() { return width; } - int getHeight() { return height; } - int getRowSize() { return rowSize; } - int getAlphaRowSize() { return width; } - SplashColorMode getMode() { return mode; } - SplashColorPtr getDataPtr() { return data; } - Guchar *getAlphaPtr() { return alpha; } - - SplashError writePNMFile(char *fileName); - SplashError writePNMFile(FILE *f); - SplashError writeAlphaPGMFile(char *fileName); - - void getPixel(int x, int y, SplashColorPtr pixel); - Guchar getAlpha(int x, int y); - - // Caller takes ownership of the bitmap data. The SplashBitmap - // object is no longer valid -- the next call should be to the - // destructor. - SplashColorPtr takeData(); - -private: - - int width, height; // size of bitmap - int rowSize; // size of one row of data, in bytes - // - negative for bottom-up bitmaps - SplashColorMode mode; // color mode - SplashColorPtr data; // pointer to row zero of the color data - Guchar *alpha; // pointer to row zero of the alpha data - // (always top-down) - - friend class Splash; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashClip.cc b/thirdparty/xpdf/3.02/src/splash/SplashClip.cc deleted file mode 100644 index da857712..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashClip.cc +++ /dev/null @@ -1,399 +0,0 @@ -//======================================================================== -// -// SplashClip.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "SplashErrorCodes.h" -#include "SplashPath.h" -#include "SplashXPath.h" -#include "SplashXPathScanner.h" -#include "SplashBitmap.h" -#include "SplashClip.h" - -//------------------------------------------------------------------------ -// SplashClip.flags -//------------------------------------------------------------------------ - -#define splashClipEO 0x01 // use even-odd rule - -//------------------------------------------------------------------------ -// SplashClip -//------------------------------------------------------------------------ - -SplashClip::SplashClip(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - GBool antialiasA) { - antialias = antialiasA; - if (x0 < x1) { - xMin = x0; - xMax = x1; - } else { - xMin = x1; - xMax = x0; - } - if (y0 < y1) { - yMin = y0; - yMax = y1; - } else { - yMin = y1; - yMax = y0; - } - xMinI = splashFloor(xMin); - yMinI = splashFloor(yMin); - xMaxI = splashCeil(xMax) - 1; - yMaxI = splashCeil(yMax) - 1; - paths = NULL; - flags = NULL; - scanners = NULL; - length = size = 0; -} - -SplashClip::SplashClip(SplashClip *clip) { - int yMinAA, yMaxAA; - int i; - - antialias = clip->antialias; - xMin = clip->xMin; - yMin = clip->yMin; - xMax = clip->xMax; - yMax = clip->yMax; - xMinI = clip->xMinI; - yMinI = clip->yMinI; - xMaxI = clip->xMaxI; - yMaxI = clip->yMaxI; - length = clip->length; - size = clip->size; - paths = (SplashXPath **)gmallocn(size, sizeof(SplashXPath *)); - flags = (Guchar *)gmallocn(size, sizeof(Guchar)); - scanners = (SplashXPathScanner **) - gmallocn(size, sizeof(SplashXPathScanner *)); - for (i = 0; i < length; ++i) { - paths[i] = clip->paths[i]->copy(); - flags[i] = clip->flags[i]; - if (antialias) { - yMinAA = yMinI * splashAASize; - yMaxAA = (yMaxI + 1) * splashAASize - 1; - } else { - yMinAA = yMinI; - yMaxAA = yMaxI; - } - scanners[i] = new SplashXPathScanner(paths[i], flags[i] & splashClipEO, - yMinAA, yMaxAA); - } -} - -SplashClip::~SplashClip() { - int i; - - for (i = 0; i < length; ++i) { - delete paths[i]; - delete scanners[i]; - } - gfree(paths); - gfree(flags); - gfree(scanners); -} - -void SplashClip::grow(int nPaths) { - if (length + nPaths > size) { - if (size == 0) { - size = 32; - } - while (size < length + nPaths) { - size *= 2; - } - paths = (SplashXPath **)greallocn(paths, size, sizeof(SplashXPath *)); - flags = (Guchar *)greallocn(flags, size, sizeof(Guchar)); - scanners = (SplashXPathScanner **) - greallocn(scanners, size, sizeof(SplashXPathScanner *)); - } -} - -void SplashClip::resetToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1) { - int i; - - for (i = 0; i < length; ++i) { - delete paths[i]; - delete scanners[i]; - } - gfree(paths); - gfree(flags); - gfree(scanners); - paths = NULL; - flags = NULL; - scanners = NULL; - length = size = 0; - - if (x0 < x1) { - xMin = x0; - xMax = x1; - } else { - xMin = x1; - xMax = x0; - } - if (y0 < y1) { - yMin = y0; - yMax = y1; - } else { - yMin = y1; - yMax = y0; - } - xMinI = splashFloor(xMin); - yMinI = splashFloor(yMin); - xMaxI = splashCeil(xMax) - 1; - yMaxI = splashCeil(yMax) - 1; -} - -SplashError SplashClip::clipToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1) { - if (x0 < x1) { - if (x0 > xMin) { - xMin = x0; - xMinI = splashFloor(xMin); - } - if (x1 < xMax) { - xMax = x1; - xMaxI = splashCeil(xMax) - 1; - } - } else { - if (x1 > xMin) { - xMin = x1; - xMinI = splashFloor(xMin); - } - if (x0 < xMax) { - xMax = x0; - xMaxI = splashCeil(xMax) - 1; - } - } - if (y0 < y1) { - if (y0 > yMin) { - yMin = y0; - yMinI = splashFloor(yMin); - } - if (y1 < yMax) { - yMax = y1; - yMaxI = splashCeil(yMax) - 1; - } - } else { - if (y1 > yMin) { - yMin = y1; - yMinI = splashFloor(yMin); - } - if (y0 < yMax) { - yMax = y0; - yMaxI = splashCeil(yMax) - 1; - } - } - return splashOk; -} - -SplashError SplashClip::clipToPath(SplashPath *path, SplashCoord *matrix, - SplashCoord flatness, GBool eo) { - SplashXPath *xPath; - int yMinAA, yMaxAA; - - xPath = new SplashXPath(path, matrix, flatness, gTrue); - - // check for an empty path - if (xPath->length == 0) { - xMax = xMin - 1; - yMax = yMin - 1; - xMaxI = splashCeil(xMax) - 1; - yMaxI = splashCeil(yMax) - 1; - delete xPath; - - // check for a rectangle - } else if (xPath->length == 4 && - ((xPath->segs[0].x0 == xPath->segs[0].x1 && - xPath->segs[0].x0 == xPath->segs[1].x0 && - xPath->segs[0].x0 == xPath->segs[3].x1 && - xPath->segs[2].x0 == xPath->segs[2].x1 && - xPath->segs[2].x0 == xPath->segs[1].x1 && - xPath->segs[2].x0 == xPath->segs[3].x0 && - xPath->segs[1].y0 == xPath->segs[1].y1 && - xPath->segs[1].y0 == xPath->segs[0].y1 && - xPath->segs[1].y0 == xPath->segs[2].y0 && - xPath->segs[3].y0 == xPath->segs[3].y1 && - xPath->segs[3].y0 == xPath->segs[0].y0 && - xPath->segs[3].y0 == xPath->segs[2].y1) || - (xPath->segs[0].y0 == xPath->segs[0].y1 && - xPath->segs[0].y0 == xPath->segs[1].y0 && - xPath->segs[0].y0 == xPath->segs[3].y1 && - xPath->segs[2].y0 == xPath->segs[2].y1 && - xPath->segs[2].y0 == xPath->segs[1].y1 && - xPath->segs[2].y0 == xPath->segs[3].y0 && - xPath->segs[1].x0 == xPath->segs[1].x1 && - xPath->segs[1].x0 == xPath->segs[0].x1 && - xPath->segs[1].x0 == xPath->segs[2].x0 && - xPath->segs[3].x0 == xPath->segs[3].x1 && - xPath->segs[3].x0 == xPath->segs[0].x0 && - xPath->segs[3].x0 == xPath->segs[2].x1))) { - clipToRect(xPath->segs[0].x0, xPath->segs[0].y0, - xPath->segs[2].x0, xPath->segs[2].y0); - delete xPath; - - } else { - grow(1); - if (antialias) { - xPath->aaScale(); - } - xPath->sort(); - paths[length] = xPath; - flags[length] = eo ? splashClipEO : 0; - if (antialias) { - yMinAA = yMinI * splashAASize; - yMaxAA = (yMaxI + 1) * splashAASize - 1; - } else { - yMinAA = yMinI; - yMaxAA = yMaxI; - } - scanners[length] = new SplashXPathScanner(xPath, eo, yMinAA, yMaxAA); - ++length; - } - - return splashOk; -} - -GBool SplashClip::test(int x, int y) { - int i; - - // check the rectangle - if (x < xMinI || x > xMaxI || y < yMinI || y > yMaxI) { - return gFalse; - } - - // check the paths - if (antialias) { - for (i = 0; i < length; ++i) { - if (!scanners[i]->test(x * splashAASize, y * splashAASize)) { - return gFalse; - } - } - } else { - for (i = 0; i < length; ++i) { - if (!scanners[i]->test(x, y)) { - return gFalse; - } - } - } - - return gTrue; -} - -SplashClipResult SplashClip::testRect(int rectXMin, int rectYMin, - int rectXMax, int rectYMax) { - // This tests the rectangle: - // x = [rectXMin, rectXMax + 1) (note: rect coords are ints) - // y = [rectYMin, rectYMax + 1) - // against the clipping region: - // x = [xMin, xMax) (note: clipping coords are fp) - // y = [yMin, yMax) - if ((SplashCoord)(rectXMax + 1) <= xMin || (SplashCoord)rectXMin >= xMax || - (SplashCoord)(rectYMax + 1) <= yMin || (SplashCoord)rectYMin >= yMax) { - return splashClipAllOutside; - } - if ((SplashCoord)rectXMin >= xMin && (SplashCoord)(rectXMax + 1) <= xMax && - (SplashCoord)rectYMin >= yMin && (SplashCoord)(rectYMax + 1) <= yMax && - length == 0) { - return splashClipAllInside; - } - return splashClipPartial; -} - -SplashClipResult SplashClip::testSpan(int spanXMin, int spanXMax, int spanY) { - int i; - - // This tests the rectangle: - // x = [spanXMin, spanXMax + 1) (note: span coords are ints) - // y = [spanY, spanY + 1) - // against the clipping region: - // x = [xMin, xMax) (note: clipping coords are fp) - // y = [yMin, yMax) - if ((SplashCoord)(spanXMax + 1) <= xMin || (SplashCoord)spanXMin >= xMax || - (SplashCoord)(spanY + 1) <= yMin || (SplashCoord)spanY >= yMax) { - return splashClipAllOutside; - } - if (!((SplashCoord)spanXMin >= xMin && (SplashCoord)(spanXMax + 1) <= xMax && - (SplashCoord)spanY >= yMin && (SplashCoord)(spanY + 1) <= yMax)) { - return splashClipPartial; - } - if (antialias) { - for (i = 0; i < length; ++i) { - if (!scanners[i]->testSpan(spanXMin * splashAASize, - spanXMax * splashAASize + (splashAASize - 1), - spanY * splashAASize)) { - return splashClipPartial; - } - } - } else { - for (i = 0; i < length; ++i) { - if (!scanners[i]->testSpan(spanXMin, spanXMax, spanY)) { - return splashClipPartial; - } - } - } - return splashClipAllInside; -} - -void SplashClip::clipAALine(SplashBitmap *aaBuf, int *x0, int *x1, int y) { - int xx0, xx1, xx, yy, i; - SplashColorPtr p; - - // zero out pixels with x < xMin - xx0 = *x0 * splashAASize; - xx1 = splashFloor(xMin * splashAASize); - if (xx1 > aaBuf->getWidth()) { - xx1 = aaBuf->getWidth(); - } - if (xx0 < xx1) { - xx0 &= ~7; - for (yy = 0; yy < splashAASize; ++yy) { - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + (xx0 >> 3); - for (xx = xx0; xx + 7 < xx1; xx += 8) { - *p++ = 0; - } - if (xx < xx1) { - *p &= 0xff >> (xx1 & 7); - } - } - *x0 = splashFloor(xMin); - } - - // zero out pixels with x > xMax - xx0 = splashFloor(xMax * splashAASize) + 1; - if (xx0 < 0) { - xx0 = 0; - } - xx1 = (*x1 + 1) * splashAASize; - if (xx0 < xx1) { - for (yy = 0; yy < splashAASize; ++yy) { - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + (xx0 >> 3); - xx = xx0; - if (xx & 7) { - *p &= 0xff00 >> (xx & 7); - xx = (xx & ~7) + 8; - ++p; - } - for (; xx < xx1; xx += 8) { - *p++ = 0; - } - } - *x1 = splashFloor(xMax); - } - - // check the paths - for (i = 0; i < length; ++i) { - scanners[i]->clipAALine(aaBuf, x0, x1, y); - } -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashClip.h b/thirdparty/xpdf/3.02/src/splash/SplashClip.h deleted file mode 100644 index 6f580f8e..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashClip.h +++ /dev/null @@ -1,113 +0,0 @@ -//======================================================================== -// -// SplashClip.h -// -//======================================================================== - -#ifndef SPLASHCLIP_H -#define SPLASHCLIP_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" -#include "SplashMath.h" - -class SplashPath; -class SplashXPath; -class SplashXPathScanner; -class SplashBitmap; - -//------------------------------------------------------------------------ - -enum SplashClipResult { - splashClipAllInside, - splashClipAllOutside, - splashClipPartial -}; - -//------------------------------------------------------------------------ -// SplashClip -//------------------------------------------------------------------------ - -class SplashClip { -public: - - // Create a clip, for the given rectangle. - SplashClip(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - GBool antialiasA); - - // Copy a clip. - SplashClip *copy() { return new SplashClip(this); } - - ~SplashClip(); - - // Reset the clip to a rectangle. - void resetToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1); - - // Intersect the clip with a rectangle. - SplashError clipToRect(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1); - - // Interesect the clip with . - SplashError clipToPath(SplashPath *path, SplashCoord *matrix, - SplashCoord flatness, GBool eo); - - // Returns true if (,) is inside the clip. - GBool test(int x, int y); - - // Tests a rectangle against the clipping region. Returns one of: - // - splashClipAllInside if the entire rectangle is inside the - // clipping region, i.e., all pixels in the rectangle are - // visible - // - splashClipAllOutside if the entire rectangle is outside the - // clipping region, i.e., all the pixels in the rectangle are - // clipped - // - splashClipPartial if the rectangle is part inside and part - // outside the clipping region - SplashClipResult testRect(int rectXMin, int rectYMin, - int rectXMax, int rectYMax); - - // Similar to testRect, but tests a horizontal span. - SplashClipResult testSpan(int spanXMin, int spanXMax, int spanY); - - // Clips an anti-aliased line by setting pixels to zero. On entry, - // all non-zero pixels are between and . This function - // will update and . - void clipAALine(SplashBitmap *aaBuf, int *x0, int *x1, int y); - - // Get the rectangle part of the clip region. - SplashCoord getXMin() { return xMin; } - SplashCoord getXMax() { return xMax; } - SplashCoord getYMin() { return yMin; } - SplashCoord getYMax() { return yMax; } - - // Get the rectangle part of the clip region, in integer coordinates. - int getXMinI() { return xMinI; } - int getXMaxI() { return xMaxI; } - int getYMinI() { return yMinI; } - int getYMaxI() { return yMaxI; } - - // Get the number of arbitrary paths used by the clip region. - int getNumPaths() { return length; } - -private: - - SplashClip(SplashClip *clip); - void grow(int nPaths); - - GBool antialias; - SplashCoord xMin, yMin, xMax, yMax; - int xMinI, yMinI, xMaxI, yMaxI; - SplashXPath **paths; - Guchar *flags; - SplashXPathScanner **scanners; - int length, size; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashErrorCodes.h b/thirdparty/xpdf/3.02/src/splash/SplashErrorCodes.h deleted file mode 100644 index 2a70d4b7..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashErrorCodes.h +++ /dev/null @@ -1,32 +0,0 @@ -//======================================================================== -// -// SplashErrorCodes.h -// -//======================================================================== - -#ifndef SPLASHERRORCODES_H -#define SPLASHERRORCODES_H - -#include - -//------------------------------------------------------------------------ - -#define splashOk 0 // no error - -#define splashErrNoCurPt 1 // no current point - -#define splashErrEmptyPath 2 // zero points in path - -#define splashErrBogusPath 3 // only one point in subpath - -#define splashErrNoSave 4 // state stack is empty - -#define splashErrOpenFile 5 // couldn't open file - -#define splashErrNoGlyph 6 // couldn't get the requested glyph - -#define splashErrModeMismatch 7 // invalid combination of color modes - -#define splashErrSingularMatrix 8 // matrix is singular - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFTFont.cc b/thirdparty/xpdf/3.02/src/splash/SplashFTFont.cc deleted file mode 100644 index f31cc988..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFTFont.cc +++ /dev/null @@ -1,363 +0,0 @@ -//======================================================================== -// -// SplashFTFont.cc -// -//======================================================================== - -#include - -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include FT_OUTLINE_H -#include FT_SIZES_H -#include FT_GLYPH_H -#include "gmem.h" -#include "SplashMath.h" -#include "SplashGlyphBitmap.h" -#include "SplashPath.h" -#include "SplashFTFontEngine.h" -#include "SplashFTFontFile.h" -#include "SplashFTFont.h" - -//------------------------------------------------------------------------ - -static int glyphPathMoveTo(const FT_Vector *pt, void *path); -static int glyphPathLineTo(const FT_Vector *pt, void *path); -static int glyphPathConicTo(const FT_Vector *ctrl, const FT_Vector *pt, - void *path); -static int glyphPathCubicTo(const FT_Vector *ctrl1, const FT_Vector *ctrl2, - const FT_Vector *pt, void *path); - -//------------------------------------------------------------------------ -// SplashFTFont -//------------------------------------------------------------------------ - -SplashFTFont::SplashFTFont(SplashFTFontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA): - SplashFont(fontFileA, matA, textMatA, fontFileA->engine->aa) -{ - FT_Face face; - int size, div; - int x, y; - - face = fontFileA->face; - if (FT_New_Size(face, &sizeObj)) { - return; - } - face->size = sizeObj; - size = splashRound(splashSqrt(mat[2]*mat[2] + mat[3]*mat[3])); - if (size < 1) { - size = 1; - } - if (FT_Set_Pixel_Sizes(face, 0, size)) { - return; - } - // if the textMat values are too small, FreeType's fixed point - // arithmetic doesn't work so well - textScale = splashSqrt(textMat[2]*textMat[2] + textMat[3]*textMat[3]) / size; - - div = face->bbox.xMax > 20000 ? 65536 : 1; - - // transform the four corners of the font bounding box -- the min - // and max values form the bounding box of the transformed font - x = (int)((mat[0] * face->bbox.xMin + mat[2] * face->bbox.yMin) / - (div * face->units_per_EM)); - xMin = xMax = x; - y = (int)((mat[1] * face->bbox.xMin + mat[3] * face->bbox.yMin) / - (div * face->units_per_EM)); - yMin = yMax = y; - x = (int)((mat[0] * face->bbox.xMin + mat[2] * face->bbox.yMax) / - (div * face->units_per_EM)); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - y = (int)((mat[1] * face->bbox.xMin + mat[3] * face->bbox.yMax) / - (div * face->units_per_EM)); - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - x = (int)((mat[0] * face->bbox.xMax + mat[2] * face->bbox.yMin) / - (div * face->units_per_EM)); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - y = (int)((mat[1] * face->bbox.xMax + mat[3] * face->bbox.yMin) / - (div * face->units_per_EM)); - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - x = (int)((mat[0] * face->bbox.xMax + mat[2] * face->bbox.yMax) / - (div * face->units_per_EM)); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - y = (int)((mat[1] * face->bbox.xMax + mat[3] * face->bbox.yMax) / - (div * face->units_per_EM)); - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - // This is a kludge: some buggy PDF generators embed fonts with - // zero bounding boxes. - if (xMax == xMin) { - xMin = 0; - xMax = size; - } - if (yMax == yMin) { - yMin = 0; - yMax = (int)((SplashCoord)1.2 * size); - } - - // compute the transform matrix -#if USE_FIXEDPOINT - matrix.xx = (FT_Fixed)((mat[0] / size).getRaw()); - matrix.yx = (FT_Fixed)((mat[1] / size).getRaw()); - matrix.xy = (FT_Fixed)((mat[2] / size).getRaw()); - matrix.yy = (FT_Fixed)((mat[3] / size).getRaw()); - textMatrix.xx = (FT_Fixed)((textMat[0] / (textScale * size)).getRaw()); - textMatrix.yx = (FT_Fixed)((textMat[1] / (textScale * size)).getRaw()); - textMatrix.xy = (FT_Fixed)((textMat[2] / (textScale * size)).getRaw()); - textMatrix.yy = (FT_Fixed)((textMat[3] / (textScale * size)).getRaw()); -#else - matrix.xx = (FT_Fixed)((mat[0] / size) * 65536); - matrix.yx = (FT_Fixed)((mat[1] / size) * 65536); - matrix.xy = (FT_Fixed)((mat[2] / size) * 65536); - matrix.yy = (FT_Fixed)((mat[3] / size) * 65536); - textMatrix.xx = (FT_Fixed)((textMat[0] / (textScale * size)) * 65536); - textMatrix.yx = (FT_Fixed)((textMat[1] / (textScale * size)) * 65536); - textMatrix.xy = (FT_Fixed)((textMat[2] / (textScale * size)) * 65536); - textMatrix.yy = (FT_Fixed)((textMat[3] / (textScale * size)) * 65536); -#endif -} - -SplashFTFont::~SplashFTFont() { -} - -GBool SplashFTFont::getGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap) { - return SplashFont::getGlyph(c, xFrac, 0, bitmap); -} - -GBool SplashFTFont::makeGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap) { - SplashFTFontFile *ff; - FT_Vector offset; - FT_GlyphSlot slot; - FT_UInt gid; - FT_Int32 flags; - int rowSize; - Guchar *p, *q; - int i; - - ff = (SplashFTFontFile *)fontFile; - - ff->face->size = sizeObj; - offset.x = (FT_Pos)(int)((SplashCoord)xFrac * splashFontFractionMul * 64); - offset.y = 0; - FT_Set_Transform(ff->face, &matrix, &offset); - slot = ff->face->glyph; - - if (ff->codeToGID && c < ff->codeToGIDLen) { - gid = (FT_UInt)ff->codeToGID[c]; - } else { - gid = (FT_UInt)c; - } - if (ff->trueType && gid < 0) { - // skip the TrueType notdef glyph - return gFalse; - } - - flags = 0; - if (aa) { - flags |= FT_LOAD_NO_BITMAP; - } - if (ff->trueType) { - // FT2's autohinting doesn't always work very well (especially with - // font subsets), so turn it off if anti-aliasing is enabled; if - // anti-aliasing is disabled, this seems to be a tossup - some fonts - // look better with hinting, some without, so leave hinting on - if (aa) { - flags |= FT_LOAD_NO_AUTOHINT; - } - } else if (ff->type1) { - // Type 1 fonts seem to look better with 'light' hinting mode - flags |= FT_LOAD_TARGET_LIGHT; - } - if (FT_Load_Glyph(ff->face, gid, flags)) { - return gFalse; - } - if (FT_Render_Glyph(slot, aa ? FT_RENDER_MODE_NORMAL - : FT_RENDER_MODE_MONO)) { - return gFalse; - } - - bitmap->x = -slot->bitmap_left; - bitmap->y = slot->bitmap_top; - bitmap->w = slot->bitmap.width; - bitmap->h = slot->bitmap.rows; - bitmap->aa = aa; - if (aa) { - rowSize = bitmap->w; - } else { - rowSize = (bitmap->w + 7) >> 3; - } - bitmap->data = (Guchar *)gmallocn(bitmap->h, rowSize); - bitmap->freeData = gTrue; - for (i = 0, p = bitmap->data, q = slot->bitmap.buffer; - i < bitmap->h; - ++i, p += rowSize, q += slot->bitmap.pitch) { - memcpy(p, q, rowSize); - } - - return gTrue; -} - -struct SplashFTFontPath { - SplashPath *path; - SplashCoord textScale; - GBool needClose; -}; - -SplashPath *SplashFTFont::getGlyphPath(int c) { - static FT_Outline_Funcs outlineFuncs = { -#if FREETYPE_MINOR <= 1 - (int (*)(FT_Vector *, void *))&glyphPathMoveTo, - (int (*)(FT_Vector *, void *))&glyphPathLineTo, - (int (*)(FT_Vector *, FT_Vector *, void *))&glyphPathConicTo, - (int (*)(FT_Vector *, FT_Vector *, FT_Vector *, void *))&glyphPathCubicTo, -#else - &glyphPathMoveTo, - &glyphPathLineTo, - &glyphPathConicTo, - &glyphPathCubicTo, -#endif - 0, 0 - }; - SplashFTFontFile *ff; - SplashFTFontPath path; - FT_GlyphSlot slot; - FT_UInt gid; - FT_Glyph glyph; - - ff = (SplashFTFontFile *)fontFile; - ff->face->size = sizeObj; - FT_Set_Transform(ff->face, &textMatrix, NULL); - slot = ff->face->glyph; - if (ff->codeToGID && c < ff->codeToGIDLen) { - gid = ff->codeToGID[c]; - } else { - gid = (FT_UInt)c; - } - if (ff->trueType && gid < 0) { - // skip the TrueType notdef glyph - return NULL; - } - if (FT_Load_Glyph(ff->face, gid, FT_LOAD_NO_BITMAP)) { - return NULL; - } - if (FT_Get_Glyph(slot, &glyph)) { - return NULL; - } - path.path = new SplashPath(); - path.textScale = textScale; - path.needClose = gFalse; - FT_Outline_Decompose(&((FT_OutlineGlyph)glyph)->outline, - &outlineFuncs, &path); - if (path.needClose) { - path.path->close(); - } - FT_Done_Glyph(glyph); - return path.path; -} - -static int glyphPathMoveTo(const FT_Vector *pt, void *path) { - SplashFTFontPath *p = (SplashFTFontPath *)path; - - if (p->needClose) { - p->path->close(); - p->needClose = gFalse; - } - p->path->moveTo((SplashCoord)pt->x * p->textScale / 64.0, - (SplashCoord)pt->y * p->textScale / 64.0); - return 0; -} - -static int glyphPathLineTo(const FT_Vector *pt, void *path) { - SplashFTFontPath *p = (SplashFTFontPath *)path; - - p->path->lineTo((SplashCoord)pt->x * p->textScale / 64.0, - (SplashCoord)pt->y * p->textScale / 64.0); - p->needClose = gTrue; - return 0; -} - -static int glyphPathConicTo(const FT_Vector *ctrl, const FT_Vector *pt, - void *path) { - SplashFTFontPath *p = (SplashFTFontPath *)path; - SplashCoord x0, y0, x1, y1, x2, y2, x3, y3, xc, yc; - - if (!p->path->getCurPt(&x0, &y0)) { - return 0; - } - xc = (SplashCoord)ctrl->x * p->textScale / 64.0; - yc = (SplashCoord)ctrl->y * p->textScale / 64.0; - x3 = (SplashCoord)pt->x * p->textScale / 64.0; - y3 = (SplashCoord)pt->y * p->textScale / 64.0; - - // A second-order Bezier curve is defined by two endpoints, p0 and - // p3, and one control point, pc: - // - // p(t) = (1-t)^2*p0 + t*(1-t)*pc + t^2*p3 - // - // A third-order Bezier curve is defined by the same two endpoints, - // p0 and p3, and two control points, p1 and p2: - // - // p(t) = (1-t)^3*p0 + 3t*(1-t)^2*p1 + 3t^2*(1-t)*p2 + t^3*p3 - // - // Applying some algebra, we can convert a second-order curve to a - // third-order curve: - // - // p1 = (1/3) * (p0 + 2pc) - // p2 = (1/3) * (2pc + p3) - - x1 = (SplashCoord)(1.0 / 3.0) * (x0 + (SplashCoord)2 * xc); - y1 = (SplashCoord)(1.0 / 3.0) * (y0 + (SplashCoord)2 * yc); - x2 = (SplashCoord)(1.0 / 3.0) * ((SplashCoord)2 * xc + x3); - y2 = (SplashCoord)(1.0 / 3.0) * ((SplashCoord)2 * yc + y3); - - p->path->curveTo(x1, y1, x2, y2, x3, y3); - p->needClose = gTrue; - return 0; -} - -static int glyphPathCubicTo(const FT_Vector *ctrl1, const FT_Vector *ctrl2, - const FT_Vector *pt, void *path) { - SplashFTFontPath *p = (SplashFTFontPath *)path; - - p->path->curveTo((SplashCoord)ctrl1->x * p->textScale / 64.0, - (SplashCoord)ctrl1->y * p->textScale / 64.0, - (SplashCoord)ctrl2->x * p->textScale / 64.0, - (SplashCoord)ctrl2->y * p->textScale / 64.0, - (SplashCoord)pt->x * p->textScale / 64.0, - (SplashCoord)pt->y * p->textScale / 64.0); - p->needClose = gTrue; - return 0; -} - -#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFTFont.h b/thirdparty/xpdf/3.02/src/splash/SplashFTFont.h deleted file mode 100644 index 8e31d145..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFTFont.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================== -// -// SplashFTFont.h -// -//======================================================================== - -#ifndef SPLASHFTFONT_H -#define SPLASHFTFONT_H - -#include - -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include FT_FREETYPE_H -#include "SplashFont.h" - -class SplashFTFontFile; - -//------------------------------------------------------------------------ -// SplashFTFont -//------------------------------------------------------------------------ - -class SplashFTFont: public SplashFont { -public: - - SplashFTFont(SplashFTFontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA); - - virtual ~SplashFTFont(); - - // Munge xFrac and yFrac before calling SplashFont::getGlyph. - virtual GBool getGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap); - - // Rasterize a glyph. The and values are the same - // as described for getGlyph. - virtual GBool makeGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap); - - // Return the path for a glyph. - virtual SplashPath *getGlyphPath(int c); - -private: - - FT_Size sizeObj; - FT_Matrix matrix; - FT_Matrix textMatrix; - SplashCoord textScale; -}; - -#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.cc b/thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.cc deleted file mode 100644 index aa9b19db..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.cc +++ /dev/null @@ -1,184 +0,0 @@ -//======================================================================== -// -// SplashFTFontEngine.cc -// -//======================================================================== - -#include - -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#ifndef WIN32 -# include -#endif -#include "gmem.h" -#include "GString.h" -#include "gfile.h" -#include "FoFiTrueType.h" -#include "FoFiType1C.h" -#include "SplashFTFontFile.h" -#include "SplashFTFontEngine.h" - -#ifdef VMS -#if (__VMS_VER < 70000000) -extern "C" int unlink(char *filename); -#endif -#endif - -//------------------------------------------------------------------------ - -static void fileWrite(void *stream, char *data, int len) { - fwrite(data, 1, len, (FILE *)stream); -} - -//------------------------------------------------------------------------ -// SplashFTFontEngine -//------------------------------------------------------------------------ - -SplashFTFontEngine::SplashFTFontEngine(GBool aaA, FT_Library libA) { - FT_Int major, minor, patch; - - aa = aaA; - lib = libA; - - // 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))); -} - -SplashFTFontEngine *SplashFTFontEngine::init(GBool aaA) { - FT_Library libA; - - if (FT_Init_FreeType(&libA)) { - return NULL; - } - return new SplashFTFontEngine(aaA, libA); -} - -SplashFTFontEngine::~SplashFTFontEngine() { - FT_Done_FreeType(lib); -} - -SplashFontFile *SplashFTFontEngine::loadType1Font(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - return SplashFTFontFile::loadType1Font(this, idA, fileName, deleteFile, enc); -} - -SplashFontFile *SplashFTFontEngine::loadType1CFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - return SplashFTFontFile::loadType1Font(this, idA, fileName, deleteFile, enc); -} - -SplashFontFile *SplashFTFontEngine::loadOpenTypeT1CFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - return SplashFTFontFile::loadType1Font(this, idA, fileName, deleteFile, enc); -} - -SplashFontFile *SplashFTFontEngine::loadCIDFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile) { - FoFiType1C *ff; - int *cidToGIDMap; - int nCIDs; - SplashFontFile *ret; - - // check for a CFF font - if (useCIDs) { - cidToGIDMap = NULL; - nCIDs = 0; - } else if ((ff = FoFiType1C::load(fileName))) { - cidToGIDMap = ff->getCIDToGIDMap(&nCIDs); - delete ff; - } else { - cidToGIDMap = NULL; - nCIDs = 0; - } - ret = SplashFTFontFile::loadCIDFont(this, idA, fileName, deleteFile, - cidToGIDMap, nCIDs); - if (!ret) { - gfree(cidToGIDMap); - } - return ret; -} - -SplashFontFile *SplashFTFontEngine::loadOpenTypeCFFFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - int *codeToGID, - int codeToGIDLen) { - FoFiTrueType *ff; - GBool isCID; - int *cidToGIDMap; - int nCIDs; - SplashFontFile *ret; - - cidToGIDMap = NULL; - nCIDs = 0; - isCID = gFalse; - if (!codeToGID) { - if (!useCIDs) { - if ((ff = FoFiTrueType::load(fileName))) { - if (ff->isOpenTypeCFF()) { - cidToGIDMap = ff->getCIDToGIDMap(&nCIDs); - } - delete ff; - } - } - } - ret = SplashFTFontFile::loadCIDFont(this, idA, fileName, deleteFile, - codeToGID ? codeToGID : cidToGIDMap, - codeToGID ? codeToGIDLen : nCIDs); - if (!ret) { - gfree(cidToGIDMap); - } - return ret; -} - -SplashFontFile *SplashFTFontEngine::loadTrueTypeFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - int *codeToGID, - int codeToGIDLen) { - FoFiTrueType *ff; - GString *tmpFileName; - FILE *tmpFile; - SplashFontFile *ret; - - if (!(ff = FoFiTrueType::load(fileName))) { - return NULL; - } - tmpFileName = NULL; - if (!openTempFile(&tmpFileName, &tmpFile, "wb", NULL)) { - delete ff; - return NULL; - } - ff->writeTTF(&fileWrite, tmpFile); - delete ff; - fclose(tmpFile); - ret = SplashFTFontFile::loadTrueTypeFont(this, idA, - tmpFileName->getCString(), - gTrue, codeToGID, codeToGIDLen); - if (ret) { - if (deleteFile) { - unlink(fileName); - } - } else { - unlink(tmpFileName->getCString()); - } - delete tmpFileName; - return ret; -} - -#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.h b/thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.h deleted file mode 100644 index 858ce015..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFTFontEngine.h +++ /dev/null @@ -1,66 +0,0 @@ -//======================================================================== -// -// SplashFTFontEngine.h -// -//======================================================================== - -#ifndef SPLASHFTFONTENGINE_H -#define SPLASHFTFONTENGINE_H - -#include - -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include FT_FREETYPE_H -#include "gtypes.h" - -class SplashFontFile; -class SplashFontFileID; - -//------------------------------------------------------------------------ -// SplashFTFontEngine -//------------------------------------------------------------------------ - -class SplashFTFontEngine { -public: - - static SplashFTFontEngine *init(GBool aaA); - - ~SplashFTFontEngine(); - - // Load fonts. - SplashFontFile *loadType1Font(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadType1CFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadOpenTypeT1CFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadCIDFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile); - SplashFontFile *loadOpenTypeCFFFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, - int *codeToGID, int codeToGIDLen); - SplashFontFile *loadTrueTypeFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, - int *codeToGID, int codeToGIDLen); - -private: - - SplashFTFontEngine(GBool aaA, FT_Library libA); - - GBool aa; - FT_Library lib; - GBool useCIDs; - - friend class SplashFTFontFile; - friend class SplashFTFont; -}; - -#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.cc b/thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.cc deleted file mode 100644 index 17226f7d..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.cc +++ /dev/null @@ -1,117 +0,0 @@ -//======================================================================== -// -// SplashFTFontFile.cc -// -//======================================================================== - -#include - -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "gmem.h" -#include "SplashFTFontEngine.h" -#include "SplashFTFont.h" -#include "SplashFTFontFile.h" - -//------------------------------------------------------------------------ -// SplashFTFontFile -//------------------------------------------------------------------------ - -SplashFontFile *SplashFTFontFile::loadType1Font(SplashFTFontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, - GBool deleteFileA, - char **encA) { - FT_Face faceA; - int *codeToGIDA; - char *name; - int i; - - if (FT_New_Face(engineA->lib, fileNameA, 0, &faceA)) { - return NULL; - } - codeToGIDA = (int *)gmallocn(256, sizeof(int)); - for (i = 0; i < 256; ++i) { - codeToGIDA[i] = 0; - if ((name = encA[i])) { - codeToGIDA[i] = (int)FT_Get_Name_Index(faceA, name); - } - } - - return new SplashFTFontFile(engineA, idA, fileNameA, deleteFileA, - faceA, codeToGIDA, 256, gFalse, gTrue); -} - -SplashFontFile *SplashFTFontFile::loadCIDFont(SplashFTFontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, - GBool deleteFileA, - int *codeToGIDA, - int codeToGIDLenA) { - FT_Face faceA; - - if (FT_New_Face(engineA->lib, fileNameA, 0, &faceA)) { - return NULL; - } - - return new SplashFTFontFile(engineA, idA, fileNameA, deleteFileA, - faceA, codeToGIDA, codeToGIDLenA, - gFalse, gFalse); -} - -SplashFontFile *SplashFTFontFile::loadTrueTypeFont(SplashFTFontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, - GBool deleteFileA, - int *codeToGIDA, - int codeToGIDLenA) { - FT_Face faceA; - - if (FT_New_Face(engineA->lib, fileNameA, 0, &faceA)) { - return NULL; - } - - return new SplashFTFontFile(engineA, idA, fileNameA, deleteFileA, - faceA, codeToGIDA, codeToGIDLenA, - gTrue, gFalse); -} - -SplashFTFontFile::SplashFTFontFile(SplashFTFontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, GBool deleteFileA, - FT_Face faceA, - int *codeToGIDA, int codeToGIDLenA, - GBool trueTypeA, GBool type1A): - SplashFontFile(idA, fileNameA, deleteFileA) -{ - engine = engineA; - face = faceA; - codeToGID = codeToGIDA; - codeToGIDLen = codeToGIDLenA; - trueType = trueTypeA; - type1 = type1A; -} - -SplashFTFontFile::~SplashFTFontFile() { - if (face) { - FT_Done_Face(face); - } - if (codeToGID) { - gfree(codeToGID); - } -} - -SplashFont *SplashFTFontFile::makeFont(SplashCoord *mat, - SplashCoord *textMat) { - SplashFont *font; - - font = new SplashFTFont(this, mat, textMat); - font->initCache(); - return font; -} - -#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.h b/thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.h deleted file mode 100644 index bd9ba3cb..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFTFontFile.h +++ /dev/null @@ -1,74 +0,0 @@ -//======================================================================== -// -// SplashFTFontFile.h -// -//======================================================================== - -#ifndef SPLASHFTFONTFILE_H -#define SPLASHFTFONTFILE_H - -#include - -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include FT_FREETYPE_H -#include "SplashFontFile.h" - -class SplashFontFileID; -class SplashFTFontEngine; - -//------------------------------------------------------------------------ -// SplashFTFontFile -//------------------------------------------------------------------------ - -class SplashFTFontFile: public SplashFontFile { -public: - - static SplashFontFile *loadType1Font(SplashFTFontEngine *engineA, - SplashFontFileID *idA, char *fileNameA, - GBool deleteFileA, char **encA); - static SplashFontFile *loadCIDFont(SplashFTFontEngine *engineA, - SplashFontFileID *idA, char *fileNameA, - GBool deleteFileA, - int *codeToGIDA, int codeToGIDLenA); - static SplashFontFile *loadTrueTypeFont(SplashFTFontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, - GBool deleteFileA, - int *codeToGIDA, - int codeToGIDLenA); - - virtual ~SplashFTFontFile(); - - // Create a new SplashFTFont, i.e., a scaled instance of this font - // file. - virtual SplashFont *makeFont(SplashCoord *mat, - SplashCoord *textMat); - -private: - - SplashFTFontFile(SplashFTFontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, GBool deleteFileA, - FT_Face faceA, - int *codeToGIDA, int codeToGIDLenA, - GBool trueTypeA, GBool type1A); - - SplashFTFontEngine *engine; - FT_Face face; - int *codeToGID; - int codeToGIDLen; - GBool trueType; - GBool type1; - - friend class SplashFTFont; -}; - -#endif // HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFont.cc b/thirdparty/xpdf/3.02/src/splash/SplashFont.cc deleted file mode 100644 index 6ab2ecf5..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFont.cc +++ /dev/null @@ -1,178 +0,0 @@ -//======================================================================== -// -// SplashFont.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "gmem.h" -#include "SplashMath.h" -#include "SplashGlyphBitmap.h" -#include "SplashFontFile.h" -#include "SplashFont.h" - -//------------------------------------------------------------------------ - -// font cache size parameters -#define splashFontCacheAssoc 8 -#define splashFontCacheMaxSets 8 -#define splashFontCacheSize (128*1024) - -//------------------------------------------------------------------------ - -struct SplashFontCacheTag { - int c; - short xFrac, yFrac; // x and y fractions - int mru; // valid bit (0x80000000) and MRU index - int x, y, w, h; // offset and size of glyph -}; - -//------------------------------------------------------------------------ -// SplashFont -//------------------------------------------------------------------------ - -SplashFont::SplashFont(SplashFontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA, GBool aaA) { - fontFile = fontFileA; - fontFile->incRefCnt(); - mat[0] = matA[0]; - mat[1] = matA[1]; - mat[2] = matA[2]; - mat[3] = matA[3]; - textMat[0] = textMatA[0]; - textMat[1] = textMatA[1]; - textMat[2] = textMatA[2]; - textMat[3] = textMatA[3]; - aa = aaA; - - cache = NULL; - cacheTags = NULL; - - xMin = yMin = xMax = yMax = 0; -} - -void SplashFont::initCache() { - int i; - - // this should be (max - min + 1), but we add some padding to - // deal with rounding errors - glyphW = xMax - xMin + 3; - glyphH = yMax - yMin + 3; - if (aa) { - glyphSize = glyphW * glyphH; - } else { - glyphSize = ((glyphW + 7) >> 3) * glyphH; - } - - // set up the glyph pixmap cache - cacheAssoc = splashFontCacheAssoc; - for (cacheSets = splashFontCacheMaxSets; - cacheSets > 1 && - cacheSets * cacheAssoc * glyphSize > splashFontCacheSize; - cacheSets >>= 1) ; - cache = (Guchar *)gmallocn(cacheSets * cacheAssoc, glyphSize); - cacheTags = (SplashFontCacheTag *)gmallocn(cacheSets * cacheAssoc, - sizeof(SplashFontCacheTag)); - for (i = 0; i < cacheSets * cacheAssoc; ++i) { - cacheTags[i].mru = i & (cacheAssoc - 1); - } -} - -SplashFont::~SplashFont() { - fontFile->decRefCnt(); - if (cache) { - gfree(cache); - } - if (cacheTags) { - gfree(cacheTags); - } -} - -GBool SplashFont::getGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap) { - SplashGlyphBitmap bitmap2; - int size; - Guchar *p; - int i, j, k; - - // no fractional coordinates for large glyphs or non-anti-aliased - // glyphs - if (!aa || glyphH > 50) { - xFrac = yFrac = 0; - } - - // check the cache - i = (c & (cacheSets - 1)) * cacheAssoc; - for (j = 0; j < cacheAssoc; ++j) { - if ((cacheTags[i+j].mru & 0x80000000) && - cacheTags[i+j].c == c && - (int)cacheTags[i+j].xFrac == xFrac && - (int)cacheTags[i+j].yFrac == yFrac) { - bitmap->x = cacheTags[i+j].x; - bitmap->y = cacheTags[i+j].y; - bitmap->w = cacheTags[i+j].w; - bitmap->h = cacheTags[i+j].h; - for (k = 0; k < cacheAssoc; ++k) { - if (k != j && - (cacheTags[i+k].mru & 0x7fffffff) < - (cacheTags[i+j].mru & 0x7fffffff)) { - ++cacheTags[i+k].mru; - } - } - cacheTags[i+j].mru = 0x80000000; - bitmap->aa = aa; - bitmap->data = cache + (i+j) * glyphSize; - bitmap->freeData = gFalse; - return gTrue; - } - } - - // generate the glyph bitmap - if (!makeGlyph(c, xFrac, yFrac, &bitmap2)) { - return gFalse; - } - - // if the glyph doesn't fit in the bounding box, return a temporary - // uncached bitmap - if (bitmap2.w > glyphW || bitmap2.h > glyphH) { - *bitmap = bitmap2; - return gTrue; - } - - // insert glyph pixmap in cache - if (aa) { - size = bitmap2.w * bitmap2.h; - } else { - size = ((bitmap2.w + 7) >> 3) * bitmap2.h; - } - p = NULL; // make gcc happy - for (j = 0; j < cacheAssoc; ++j) { - if ((cacheTags[i+j].mru & 0x7fffffff) == cacheAssoc - 1) { - cacheTags[i+j].mru = 0x80000000; - cacheTags[i+j].c = c; - cacheTags[i+j].xFrac = (short)xFrac; - cacheTags[i+j].yFrac = (short)yFrac; - cacheTags[i+j].x = bitmap2.x; - cacheTags[i+j].y = bitmap2.y; - cacheTags[i+j].w = bitmap2.w; - cacheTags[i+j].h = bitmap2.h; - p = cache + (i+j) * glyphSize; - memcpy(p, bitmap2.data, size); - } else { - ++cacheTags[i+j].mru; - } - } - *bitmap = bitmap2; - bitmap->data = p; - bitmap->freeData = gFalse; - if (bitmap2.freeData) { - gfree(bitmap2.data); - } - return gTrue; -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFont.h b/thirdparty/xpdf/3.02/src/splash/SplashFont.h deleted file mode 100644 index 60a2db76..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFont.h +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================== -// -// SplashFont.h -// -//======================================================================== - -#ifndef SPLASHFONT_H -#define SPLASHFONT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "SplashTypes.h" - -struct SplashGlyphBitmap; -struct SplashFontCacheTag; -class SplashFontFile; -class SplashPath; - -//------------------------------------------------------------------------ - -// Fractional positioning uses this many bits to the right of the -// decimal points. -#define splashFontFractionBits 2 -#define splashFontFraction (1 << splashFontFractionBits) -#define splashFontFractionMul \ - ((SplashCoord)1 / (SplashCoord)splashFontFraction) - -//------------------------------------------------------------------------ -// SplashFont -//------------------------------------------------------------------------ - -class SplashFont { -public: - - SplashFont(SplashFontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA, GBool aaA); - - // This must be called after the constructor, so that the subclass - // constructor has a chance to compute the bbox. - void initCache(); - - virtual ~SplashFont(); - - SplashFontFile *getFontFile() { return fontFile; } - - // Return true if matches the specified font file and matrix. - GBool matches(SplashFontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA) { - return fontFileA == fontFile && - matA[0] == mat[0] && matA[1] == mat[1] && - matA[2] == mat[2] && matA[3] == mat[3] && - textMatA[0] == textMat[0] && textMatA[1] == textMat[1] && - textMatA[2] == textMat[2] && textMatA[3] == textMat[3]; - } - - // Get a glyph - this does a cache lookup first, and if not found, - // creates a new bitmap and adds it to the cache. The and - // values are splashFontFractionBits bits each, representing - // the numerators of fractions in [0, 1), where the denominator is - // splashFontFraction = 1 << splashFontFractionBits. Subclasses - // should override this to zero out xFrac and/or yFrac if they don't - // support fractional coordinates. - virtual GBool getGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap); - - // Rasterize a glyph. The and values are the same - // as described for getGlyph. - virtual GBool makeGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap) = 0; - - // Return the path for a glyph. - virtual SplashPath *getGlyphPath(int c) = 0; - - // Return the font transform matrix. - SplashCoord *getMatrix() { return mat; } - - // Return the glyph bounding box. - void getBBox(int *xMinA, int *yMinA, int *xMaxA, int *yMaxA) - { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } - -protected: - - SplashFontFile *fontFile; - SplashCoord mat[4]; // font transform matrix - // (text space -> device space) - SplashCoord textMat[4]; // text transform matrix - // (text space -> user space) - GBool aa; // anti-aliasing - int xMin, yMin, xMax, yMax; // glyph bounding box - Guchar *cache; // glyph bitmap cache - SplashFontCacheTag * // cache tags - cacheTags; - int glyphW, glyphH; // size of glyph bitmaps - int glyphSize; // size of glyph bitmaps, in bytes - int cacheSets; // number of sets in cache - int cacheAssoc; // cache associativity (glyphs per set) -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFontEngine.cc b/thirdparty/xpdf/3.02/src/splash/SplashFontEngine.cc deleted file mode 100644 index 796020b6..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFontEngine.cc +++ /dev/null @@ -1,320 +0,0 @@ -//======================================================================== -// -// SplashFontEngine.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#if HAVE_T1LIB_H -#include -#endif - -#include -#include -#ifndef WIN32 -# include -#endif -#include "gmem.h" -#include "GString.h" -#include "SplashMath.h" -#include "SplashT1FontEngine.h" -#include "SplashFTFontEngine.h" -#include "SplashFontFile.h" -#include "SplashFontFileID.h" -#include "SplashFont.h" -#include "SplashFontEngine.h" - -#ifdef VMS -#if (__VMS_VER < 70000000) -extern "C" int unlink(char *filename); -#endif -#endif - -//------------------------------------------------------------------------ -// SplashFontEngine -//------------------------------------------------------------------------ - -SplashFontEngine::SplashFontEngine( -#if HAVE_T1LIB_H - GBool enableT1lib, -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - GBool enableFreeType, -#endif - GBool aa) { - int i; - - for (i = 0; i < splashFontCacheSize; ++i) { - fontCache[i] = NULL; - } - -#if HAVE_T1LIB_H - if (enableT1lib) { - t1Engine = SplashT1FontEngine::init(aa); - } else { - t1Engine = NULL; - } -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (enableFreeType) { - ftEngine = SplashFTFontEngine::init(aa); - } else { - ftEngine = NULL; - } -#endif -} - -SplashFontEngine::~SplashFontEngine() { - int i; - - for (i = 0; i < splashFontCacheSize; ++i) { - if (fontCache[i]) { - delete fontCache[i]; - } - } - -#if HAVE_T1LIB_H - if (t1Engine) { - delete t1Engine; - } -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (ftEngine) { - delete ftEngine; - } -#endif -} - -SplashFontFile *SplashFontEngine::getFontFile(SplashFontFileID *id) { - SplashFontFile *fontFile; - int i; - - for (i = 0; i < splashFontCacheSize; ++i) { - if (fontCache[i]) { - fontFile = fontCache[i]->getFontFile(); - if (fontFile && fontFile->getID()->matches(id)) { - return fontFile; - } - } - } - return NULL; -} - -SplashFontFile *SplashFontEngine::loadType1Font(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, char **enc) { - SplashFontFile *fontFile; - - fontFile = NULL; -#if HAVE_T1LIB_H - if (!fontFile && t1Engine) { - fontFile = t1Engine->loadType1Font(idA, fileName, deleteFile, enc); - } -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (!fontFile && ftEngine) { - fontFile = ftEngine->loadType1Font(idA, fileName, deleteFile, enc); - } -#endif - -#ifndef WIN32 - // delete the (temporary) font file -- with Unix hard link - // semantics, this will remove the last link; otherwise it will - // return an error, leaving the file to be deleted later (if - // loadXYZFont failed, the file will always be deleted) - if (deleteFile) { - unlink(fontFile ? fontFile->fileName->getCString() : fileName); - } -#endif - - return fontFile; -} - -SplashFontFile *SplashFontEngine::loadType1CFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - SplashFontFile *fontFile; - - fontFile = NULL; -#if HAVE_T1LIB_H - if (!fontFile && t1Engine) { - fontFile = t1Engine->loadType1CFont(idA, fileName, deleteFile, enc); - } -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (!fontFile && ftEngine) { - fontFile = ftEngine->loadType1CFont(idA, fileName, deleteFile, enc); - } -#endif - -#ifndef WIN32 - // delete the (temporary) font file -- with Unix hard link - // semantics, this will remove the last link; otherwise it will - // return an error, leaving the file to be deleted later (if - // loadXYZFont failed, the file will always be deleted) - if (deleteFile) { - unlink(fontFile ? fontFile->fileName->getCString() : fileName); - } -#endif - - return fontFile; -} - -SplashFontFile *SplashFontEngine::loadOpenTypeT1CFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - SplashFontFile *fontFile; - - fontFile = NULL; -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (!fontFile && ftEngine) { - fontFile = ftEngine->loadOpenTypeT1CFont(idA, fileName, deleteFile, enc); - } -#endif - -#ifndef WIN32 - // delete the (temporary) font file -- with Unix hard link - // semantics, this will remove the last link; otherwise it will - // return an error, leaving the file to be deleted later (if - // loadXYZFont failed, the file will always be deleted) - if (deleteFile) { - unlink(fontFile ? fontFile->fileName->getCString() : fileName); - } -#endif - - return fontFile; -} - -SplashFontFile *SplashFontEngine::loadCIDFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile) { - SplashFontFile *fontFile; - - fontFile = NULL; -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (!fontFile && ftEngine) { - fontFile = ftEngine->loadCIDFont(idA, fileName, deleteFile); - } -#endif - -#ifndef WIN32 - // delete the (temporary) font file -- with Unix hard link - // semantics, this will remove the last link; otherwise it will - // return an error, leaving the file to be deleted later (if - // loadXYZFont failed, the file will always be deleted) - if (deleteFile) { - unlink(fontFile ? fontFile->fileName->getCString() : fileName); - } -#endif - - return fontFile; -} - -SplashFontFile *SplashFontEngine::loadOpenTypeCFFFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - int *codeToGID, - int codeToGIDLen) { - SplashFontFile *fontFile; - - fontFile = NULL; -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (!fontFile && ftEngine) { - fontFile = ftEngine->loadOpenTypeCFFFont(idA, fileName, deleteFile, - codeToGID, codeToGIDLen); - } -#endif - -#ifndef WIN32 - // delete the (temporary) font file -- with Unix hard link - // semantics, this will remove the last link; otherwise it will - // return an error, leaving the file to be deleted later (if - // loadXYZFont failed, the file will always be deleted) - if (deleteFile) { - unlink(fontFile ? fontFile->fileName->getCString() : fileName); - } -#endif - - return fontFile; -} - -SplashFontFile *SplashFontEngine::loadTrueTypeFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - int *codeToGID, - int codeToGIDLen) { - SplashFontFile *fontFile; - - fontFile = NULL; -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - if (!fontFile && ftEngine) { - fontFile = ftEngine->loadTrueTypeFont(idA, fileName, deleteFile, - codeToGID, codeToGIDLen); - } -#endif - - if (!fontFile) { - gfree(codeToGID); - } - -#ifndef WIN32 - // delete the (temporary) font file -- with Unix hard link - // semantics, this will remove the last link; otherwise it will - // return an error, leaving the file to be deleted later (if - // loadXYZFont failed, the file will always be deleted) - if (deleteFile) { - unlink(fontFile ? fontFile->fileName->getCString() : fileName); - } -#endif - - return fontFile; -} - -SplashFont *SplashFontEngine::getFont(SplashFontFile *fontFile, - SplashCoord *textMat, - SplashCoord *ctm) { - SplashCoord mat[4]; - SplashFont *font; - int i, j; - - mat[0] = textMat[0] * ctm[0] + textMat[1] * ctm[2]; - mat[1] = -(textMat[0] * ctm[1] + textMat[1] * ctm[3]); - mat[2] = textMat[2] * ctm[0] + textMat[3] * ctm[2]; - mat[3] = -(textMat[2] * ctm[1] + textMat[3] * ctm[3]); - if (splashAbs(mat[0] * mat[3] - mat[1] * mat[2]) < 0.01) { - // avoid a singular (or close-to-singular) matrix - mat[0] = 0.01; mat[1] = 0; - mat[2] = 0; mat[3] = 0.01; - } - - font = fontCache[0]; - if (font && font->matches(fontFile, mat, textMat)) { - return font; - } - for (i = 1; i < splashFontCacheSize; ++i) { - font = fontCache[i]; - if (font && font->matches(fontFile, mat, textMat)) { - for (j = i; j > 0; --j) { - fontCache[j] = fontCache[j-1]; - } - fontCache[0] = font; - return font; - } - } - font = fontFile->makeFont(mat, textMat); - if (fontCache[splashFontCacheSize - 1]) { - delete fontCache[splashFontCacheSize - 1]; - } - for (j = splashFontCacheSize - 1; j > 0; --j) { - fontCache[j] = fontCache[j-1]; - } - fontCache[0] = font; - return font; -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFontEngine.h b/thirdparty/xpdf/3.02/src/splash/SplashFontEngine.h deleted file mode 100644 index 87659a56..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFontEngine.h +++ /dev/null @@ -1,92 +0,0 @@ -//======================================================================== -// -// SplashFontEngine.h -// -//======================================================================== - -#ifndef SPLASHFONTENGINE_H -#define SPLASHFONTENGINE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -class SplashT1FontEngine; -class SplashFTFontEngine; -class SplashDTFontEngine; -class SplashDT4FontEngine; -class SplashFontFile; -class SplashFontFileID; -class SplashFont; - -//------------------------------------------------------------------------ - -#define splashFontCacheSize 16 - -//------------------------------------------------------------------------ -// SplashFontEngine -//------------------------------------------------------------------------ - -class SplashFontEngine { -public: - - // Create a font engine. - SplashFontEngine( -#if HAVE_T1LIB_H - GBool enableT1lib, -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - GBool enableFreeType, -#endif - GBool aa); - - ~SplashFontEngine(); - - // Get a font file from the cache. Returns NULL if there is no - // matching entry in the cache. - SplashFontFile *getFontFile(SplashFontFileID *id); - - // Load fonts - these create new SplashFontFile objects. - SplashFontFile *loadType1Font(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadType1CFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadOpenTypeT1CFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadCIDFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile); - SplashFontFile *loadOpenTypeCFFFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, - int *codeToGID, int codeToGIDLen); - SplashFontFile *loadTrueTypeFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, - int *codeToGID, int codeToGIDLen); - - // Get a font - this does a cache lookup first, and if not found, - // creates a new SplashFont object and adds it to the cache. The - // matrix, mat = textMat * ctm: - // [ mat[0] mat[1] ] - // [ mat[2] mat[3] ] - // specifies the font transform in PostScript style: - // [x' y'] = [x y] * mat - // Note that the Splash y axis points downward. - SplashFont *getFont(SplashFontFile *fontFile, - SplashCoord *textMat, SplashCoord *ctm); - -private: - - SplashFont *fontCache[splashFontCacheSize]; - -#if HAVE_T1LIB_H - SplashT1FontEngine *t1Engine; -#endif -#if HAVE_FREETYPE_FREETYPE_H || HAVE_FREETYPE_H - SplashFTFontEngine *ftEngine; -#endif -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFontFile.cc b/thirdparty/xpdf/3.02/src/splash/SplashFontFile.cc deleted file mode 100644 index acbc12a3..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFontFile.cc +++ /dev/null @@ -1,55 +0,0 @@ -//======================================================================== -// -// SplashFontFile.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#ifndef WIN32 -# include -#endif -#include "GString.h" -#include "SplashFontFile.h" -#include "SplashFontFileID.h" - -#ifdef VMS -#if (__VMS_VER < 70000000) -extern "C" int unlink(char *filename); -#endif -#endif - -//------------------------------------------------------------------------ -// SplashFontFile -//------------------------------------------------------------------------ - -SplashFontFile::SplashFontFile(SplashFontFileID *idA, char *fileNameA, - GBool deleteFileA) { - id = idA; - fileName = new GString(fileNameA); - deleteFile = deleteFileA; - refCnt = 0; -} - -SplashFontFile::~SplashFontFile() { - if (deleteFile) { - unlink(fileName->getCString()); - } - delete fileName; - delete id; -} - -void SplashFontFile::incRefCnt() { - ++refCnt; -} - -void SplashFontFile::decRefCnt() { - if (!--refCnt) { - delete this; - } -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFontFile.h b/thirdparty/xpdf/3.02/src/splash/SplashFontFile.h deleted file mode 100644 index 9f893129..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFontFile.h +++ /dev/null @@ -1,60 +0,0 @@ -//======================================================================== -// -// SplashFontFile.h -// -//======================================================================== - -#ifndef SPLASHFONTFILE_H -#define SPLASHFONTFILE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "SplashTypes.h" - -class GString; -class SplashFontEngine; -class SplashFont; -class SplashFontFileID; - -//------------------------------------------------------------------------ -// SplashFontFile -//------------------------------------------------------------------------ - -class SplashFontFile { -public: - - virtual ~SplashFontFile(); - - // Create a new SplashFont, i.e., a scaled instance of this font - // file. - virtual SplashFont *makeFont(SplashCoord *mat, SplashCoord *textMat) = 0; - - // Get the font file ID. - SplashFontFileID *getID() { return id; } - - // Increment the reference count. - void incRefCnt(); - - // Decrement the reference count. If the new value is zero, delete - // the SplashFontFile object. - void decRefCnt(); - -protected: - - SplashFontFile(SplashFontFileID *idA, char *fileNameA, - GBool deleteFileA); - - SplashFontFileID *id; - GString *fileName; - GBool deleteFile; - int refCnt; - - friend class SplashFontEngine; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFontFileID.cc b/thirdparty/xpdf/3.02/src/splash/SplashFontFileID.cc deleted file mode 100644 index af37cb2f..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFontFileID.cc +++ /dev/null @@ -1,23 +0,0 @@ -//======================================================================== -// -// SplashFontFileID.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "SplashFontFileID.h" - -//------------------------------------------------------------------------ -// SplashFontFileID -//------------------------------------------------------------------------ - -SplashFontFileID::SplashFontFileID() { -} - -SplashFontFileID::~SplashFontFileID() { -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashFontFileID.h b/thirdparty/xpdf/3.02/src/splash/SplashFontFileID.h deleted file mode 100644 index bed11d33..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashFontFileID.h +++ /dev/null @@ -1,30 +0,0 @@ -//======================================================================== -// -// SplashFontFileID.h -// -//======================================================================== - -#ifndef SPLASHFONTFILEID_H -#define SPLASHFONTFILEID_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -//------------------------------------------------------------------------ -// SplashFontFileID -//------------------------------------------------------------------------ - -class SplashFontFileID { -public: - - SplashFontFileID(); - virtual ~SplashFontFileID(); - virtual GBool matches(SplashFontFileID *id) = 0; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashGlyphBitmap.h b/thirdparty/xpdf/3.02/src/splash/SplashGlyphBitmap.h deleted file mode 100644 index 044ba4a6..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashGlyphBitmap.h +++ /dev/null @@ -1,26 +0,0 @@ -//======================================================================== -// -// SplashGlyphBitmap.h -// -//======================================================================== - -#ifndef SPLASHGLYPHBITMAP_H -#define SPLASHGLYPHBITMAP_H - -#include - -#include "gtypes.h" - -//------------------------------------------------------------------------ -// SplashGlyphBitmap -//------------------------------------------------------------------------ - -struct SplashGlyphBitmap { - int x, y, w, h; // offset and size of glyph - GBool aa; // anti-aliased: true means 8-bit alpha - // bitmap; false means 1-bit - Guchar *data; // bitmap data - GBool freeData; // true if data memory should be freed -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashMath.h b/thirdparty/xpdf/3.02/src/splash/SplashMath.h deleted file mode 100644 index 20b4e794..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashMath.h +++ /dev/null @@ -1,206 +0,0 @@ -//======================================================================== -// -// SplashMath.h -// -//======================================================================== - -#ifndef SPLASHMATH_H -#define SPLASHMATH_H - -#include - -#if USE_FIXEDPONT -#include "FixedPoint.h" -#else -#include -#endif -#include "SplashTypes.h" - -static inline SplashCoord splashAbs(SplashCoord x) { -#if USE_FIXEDPOINT - return FixedPoint::abs(x); -#else - return fabs(x); -#endif -} - -static inline int splashFloor(SplashCoord x) { -#if USE_FIXEDPOINT - return FixedPoint::floor(x); -#else -#if WIN32 && _M_IX86 - // floor() and (int)() are implemented separately, which results - // in changing the FPCW multiple times - so we optimize it with - // some inline assembly - Gushort oldCW, newCW; - int result; - - __asm fld QWORD PTR x - __asm fnstcw WORD PTR oldCW - __asm mov ax, WORD PTR oldCW - __asm and ax, 0xf3ff - __asm or ax, 0x0400 - __asm mov WORD PTR newCW, ax // round down - __asm fldcw WORD PTR newCW - __asm fistp DWORD PTR result - __asm fldcw WORD PTR oldCW - return result; -#elif __GNUC__ && __i386__ - // floor() and (int)() are implemented separately, which results - // in changing the FPCW multiple times - so we optimize it with - // some inline assembly - Gushort oldCW, newCW, t; - int result; - - __asm__ volatile("fldl %4\n" - "fnstcw %0\n" - "movw %0, %3\n" - "andw $0xf3ff, %3\n" - "orw $0x0400, %3\n" - "movw %3, %1\n" // round down - "fldcw %1\n" - "fistpl %2\n" - "fldcw %0\n" - : "=m" (oldCW), "=m" (newCW), "=m" (result), "=r" (t) - : "m" (x)); - return result; -#else - return (int)floor(x); -#endif -#endif -} - -static inline int splashCeil(SplashCoord x) { -#if USE_FIXEDPOINT - return FixedPoint::ceil(x); -#else -#if WIN32 && _M_IX86 - // ceil() and (int)() are implemented separately, which results - // in changing the FPCW multiple times - so we optimize it with - // some inline assembly - Gushort oldCW, newCW; - int result; - - __asm fld QWORD PTR x - __asm fnstcw WORD PTR oldCW - __asm mov ax, WORD PTR oldCW - __asm and ax, 0xf3ff - __asm or ax, 0x0800 - __asm mov WORD PTR newCW, ax // round up - __asm fldcw WORD PTR newCW - __asm fistp DWORD PTR result - __asm fldcw WORD PTR oldCW - return result; -#elif __GNUC__ && __i386__ - // ceil() and (int)() are implemented separately, which results - // in changing the FPCW multiple times - so we optimize it with - // some inline assembly - Gushort oldCW, newCW, t; - int result; - - __asm__ volatile("fldl %4\n" - "fnstcw %0\n" - "movw %0, %3\n" - "andw $0xf3ff, %3\n" - "orw $0x0800, %3\n" - "movw %3, %1\n" // round up - "fldcw %1\n" - "fistpl %2\n" - "fldcw %0\n" - : "=m" (oldCW), "=m" (newCW), "=m" (result), "=r" (t) - : "m" (x)); - return result; -#else - return (int)ceil(x); -#endif -#endif -} - -static inline int splashRound(SplashCoord x) { -#if USE_FIXEDPOINT - return FixedPoint::round(x); -#else -#if WIN32 && _M_IX86 - // this could use round-to-nearest mode and avoid the "+0.5", - // but that produces slightly different results (because i+0.5 - // sometimes rounds up and sometimes down using the even rule) - Gushort oldCW, newCW; - int result; - - x += 0.5; - __asm fld QWORD PTR x - __asm fnstcw WORD PTR oldCW - __asm mov ax, WORD PTR oldCW - __asm and ax, 0xf3ff - __asm or ax, 0x0400 - __asm mov WORD PTR newCW, ax // round down - __asm fldcw WORD PTR newCW - __asm fistp DWORD PTR result - __asm fldcw WORD PTR oldCW - return result; -#elif __GNUC__ && __i386__ - // this could use round-to-nearest mode and avoid the "+0.5", - // but that produces slightly different results (because i+0.5 - // sometimes rounds up and sometimes down using the even rule) - Gushort oldCW, newCW, t; - int result; - - x += 0.5; - __asm__ volatile("fldl %4\n" - "fnstcw %0\n" - "movw %0, %3\n" - "andw $0xf3ff, %3\n" - "orw $0x0400, %3\n" - "movw %3, %1\n" // round down - "fldcw %1\n" - "fistpl %2\n" - "fldcw %0\n" - : "=m" (oldCW), "=m" (newCW), "=m" (result), "=r" (t) - : "m" (x)); - return result; -#else - return (int)floor(x + 0.5); -#endif -#endif -} - -static inline SplashCoord splashSqrt(SplashCoord x) { -#if USE_FIXEDPOINT - return FixedPoint::sqrt(x); -#else - return sqrt(x); -#endif -} - -static inline SplashCoord splashPow(SplashCoord x, SplashCoord y) { -#if USE_FIXEDPOINT - return FixedPoint::pow(x, y); -#else - return pow(x, y); -#endif -} - -static inline SplashCoord splashDist(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1) { - SplashCoord dx, dy; - dx = x1 - x0; - dy = y1 - y0; -#if USE_FIXEDPOINT - // this handles the situation where dx*dx or dy*dy is too large to - // fit in the 16.16 fixed point format - SplashCoord dxa, dya; - dxa = splashAbs(dx); - dya = splashAbs(dy); - if (dxa == 0 && dya == 0) { - return 0; - } else if (dxa > dya) { - return dxa * FixedPoint::sqrt(dya / dxa + 1); - } else { - return dya * FixedPoint::sqrt(dxa / dya + 1); - } -#else - return sqrt(dx * dx + dy * dy); -#endif -} - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashPath.cc b/thirdparty/xpdf/3.02/src/splash/SplashPath.cc deleted file mode 100644 index b4249ed6..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashPath.cc +++ /dev/null @@ -1,185 +0,0 @@ -//======================================================================== -// -// SplashPath.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "gmem.h" -#include "SplashErrorCodes.h" -#include "SplashPath.h" - -//------------------------------------------------------------------------ -// SplashPath -//------------------------------------------------------------------------ - -// A path can be in three possible states: -// -// 1. no current point -- zero or more finished subpaths -// [curSubpath == length] -// -// 2. one point in subpath -// [curSubpath == length - 1] -// -// 3. open subpath with two or more points -// [curSubpath < length - 1] - -SplashPath::SplashPath() { - pts = NULL; - flags = NULL; - length = size = 0; - curSubpath = 0; - hints = NULL; - hintsLength = hintsSize = 0; -} - -SplashPath::SplashPath(SplashPath *path) { - length = path->length; - size = path->size; - pts = (SplashPathPoint *)gmallocn(size, sizeof(SplashPathPoint)); - flags = (Guchar *)gmallocn(size, sizeof(Guchar)); - memcpy(pts, path->pts, length * sizeof(SplashPathPoint)); - memcpy(flags, path->flags, length * sizeof(Guchar)); - curSubpath = path->curSubpath; - if (path->hints) { - hintsLength = hintsSize = path->hintsLength; - hints = (SplashPathHint *)gmallocn(hintsSize, sizeof(SplashPathHint)); - memcpy(hints, path->hints, hintsLength * sizeof(SplashPathHint)); - } else { - hints = NULL; - } -} - -SplashPath::~SplashPath() { - gfree(pts); - gfree(flags); - gfree(hints); -} - -// Add space for more points. -void SplashPath::grow(int nPts) { - if (length + nPts > size) { - if (size == 0) { - size = 32; - } - while (size < length + nPts) { - size *= 2; - } - pts = (SplashPathPoint *)greallocn(pts, size, sizeof(SplashPathPoint)); - flags = (Guchar *)greallocn(flags, size, sizeof(Guchar)); - } -} - -void SplashPath::append(SplashPath *path) { - int i; - - curSubpath = length + path->curSubpath; - grow(path->length); - for (i = 0; i < path->length; ++i) { - pts[length] = path->pts[i]; - flags[length] = path->flags[i]; - ++length; - } -} - -SplashError SplashPath::moveTo(SplashCoord x, SplashCoord y) { - if (onePointSubpath()) { - return splashErrBogusPath; - } - grow(1); - pts[length].x = x; - pts[length].y = y; - flags[length] = splashPathFirst | splashPathLast; - curSubpath = length++; - return splashOk; -} - -SplashError SplashPath::lineTo(SplashCoord x, SplashCoord y) { - if (noCurrentPoint()) { - return splashErrNoCurPt; - } - flags[length-1] &= ~splashPathLast; - grow(1); - pts[length].x = x; - pts[length].y = y; - flags[length] = splashPathLast; - ++length; - return splashOk; -} - -SplashError SplashPath::curveTo(SplashCoord x1, SplashCoord y1, - SplashCoord x2, SplashCoord y2, - SplashCoord x3, SplashCoord y3) { - if (noCurrentPoint()) { - return splashErrNoCurPt; - } - flags[length-1] &= ~splashPathLast; - grow(3); - pts[length].x = x1; - pts[length].y = y1; - flags[length] = splashPathCurve; - ++length; - pts[length].x = x2; - pts[length].y = y2; - flags[length] = splashPathCurve; - ++length; - pts[length].x = x3; - pts[length].y = y3; - flags[length] = splashPathLast; - ++length; - return splashOk; -} - -SplashError SplashPath::close(GBool force) { - if (noCurrentPoint()) { - return splashErrNoCurPt; - } - if (force || - curSubpath == length - 1 || - pts[length - 1].x != pts[curSubpath].x || - pts[length - 1].y != pts[curSubpath].y) { - lineTo(pts[curSubpath].x, pts[curSubpath].y); - } - flags[curSubpath] |= splashPathClosed; - flags[length - 1] |= splashPathClosed; - curSubpath = length; - return splashOk; -} - -void SplashPath::addStrokeAdjustHint(int ctrl0, int ctrl1, - int firstPt, int lastPt) { - if (hintsLength == hintsSize) { - hintsSize = hintsLength ? 2 * hintsLength : 8; - hints = (SplashPathHint *)greallocn(hints, hintsSize, - sizeof(SplashPathHint)); - } - hints[hintsLength].ctrl0 = ctrl0; - hints[hintsLength].ctrl1 = ctrl1; - hints[hintsLength].firstPt = firstPt; - hints[hintsLength].lastPt = lastPt; - ++hintsLength; -} - -void SplashPath::offset(SplashCoord dx, SplashCoord dy) { - int i; - - for (i = 0; i < length; ++i) { - pts[i].x += dx; - pts[i].y += dy; - } -} - -GBool SplashPath::getCurPt(SplashCoord *x, SplashCoord *y) { - if (noCurrentPoint()) { - return gFalse; - } - *x = pts[length - 1].x; - *y = pts[length - 1].y; - return gTrue; -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashPath.h b/thirdparty/xpdf/3.02/src/splash/SplashPath.h deleted file mode 100644 index aae51f2e..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashPath.h +++ /dev/null @@ -1,123 +0,0 @@ -//======================================================================== -// -// SplashPath.h -// -//======================================================================== - -#ifndef SPLASHPATH_H -#define SPLASHPATH_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" - -//------------------------------------------------------------------------ -// SplashPathPoint -//------------------------------------------------------------------------ - -struct SplashPathPoint { - SplashCoord x, y; -}; - -//------------------------------------------------------------------------ -// SplashPath.flags -//------------------------------------------------------------------------ - -// first point on each subpath sets this flag -#define splashPathFirst 0x01 - -// last point on each subpath sets this flag -#define splashPathLast 0x02 - -// if the subpath is closed, its first and last points must be -// identical, and must set this flag -#define splashPathClosed 0x04 - -// curve control points set this flag -#define splashPathCurve 0x08 - -//------------------------------------------------------------------------ -// SplashPathHint -//------------------------------------------------------------------------ - -struct SplashPathHint { - int ctrl0, ctrl1; - int firstPt, lastPt; -}; - -//------------------------------------------------------------------------ -// SplashPath -//------------------------------------------------------------------------ - -class SplashPath { -public: - - // Create an empty path. - SplashPath(); - - // Copy a path. - SplashPath *copy() { return new SplashPath(this); } - - ~SplashPath(); - - // Append to . - void append(SplashPath *path); - - // Start a new subpath. - SplashError moveTo(SplashCoord x, SplashCoord y); - - // Add a line segment to the last subpath. - SplashError lineTo(SplashCoord x, SplashCoord y); - - // Add a third-order (cubic) Bezier curve segment to the last - // subpath. - SplashError curveTo(SplashCoord x1, SplashCoord y1, - SplashCoord x2, SplashCoord y2, - SplashCoord x3, SplashCoord y3); - - // Close the last subpath, adding a line segment if necessary. If - // is true, this adds a line segment even if the current - // point is equal to the first point in the subpath. - SplashError close(GBool force = gFalse); - - // Add a stroke adjustment hint. The controlling segments are - // and (where segments are identified by their first - // point), and the points to be adjusted are .. . - void addStrokeAdjustHint(int ctrl0, int ctrl1, int firstPt, int lastPt); - - // Add (, ) to every point on this path. - void offset(SplashCoord dx, SplashCoord dy); - - // Get the points on the path. - int getLength() { return length; } - void getPoint(int i, double *x, double *y, Guchar *f) - { *x = pts[i].x; *y = pts[i].y; *f = flags[i]; } - - // Get the current point. - GBool getCurPt(SplashCoord *x, SplashCoord *y); - -private: - - SplashPath(SplashPath *path); - void grow(int nPts); - GBool noCurrentPoint() { return curSubpath == length; } - GBool onePointSubpath() { return curSubpath == length - 1; } - GBool openSubpath() { return curSubpath < length - 1; } - - SplashPathPoint *pts; // array of points - Guchar *flags; // array of flags - int length, size; // length/size of the pts and flags arrays - int curSubpath; // index of first point in last subpath - - SplashPathHint *hints; // list of hints - int hintsLength, hintsSize; - - friend class SplashXPath; - friend class Splash; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashPattern.cc b/thirdparty/xpdf/3.02/src/splash/SplashPattern.cc deleted file mode 100644 index b77658ef..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashPattern.cc +++ /dev/null @@ -1,40 +0,0 @@ -//======================================================================== -// -// SplashPattern.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "SplashMath.h" -#include "SplashScreen.h" -#include "SplashPattern.h" - -//------------------------------------------------------------------------ -// SplashPattern -//------------------------------------------------------------------------ - -SplashPattern::SplashPattern() { -} - -SplashPattern::~SplashPattern() { -} - -//------------------------------------------------------------------------ -// SplashSolidColor -//------------------------------------------------------------------------ - -SplashSolidColor::SplashSolidColor(SplashColorPtr colorA) { - splashColorCopy(color, colorA); -} - -SplashSolidColor::~SplashSolidColor() { -} - -void SplashSolidColor::getColor(int x, int y, SplashColorPtr c) { - splashColorCopy(c, color); -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashPattern.h b/thirdparty/xpdf/3.02/src/splash/SplashPattern.h deleted file mode 100644 index 0a02e9c2..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashPattern.h +++ /dev/null @@ -1,65 +0,0 @@ -//======================================================================== -// -// SplashPattern.h -// -//======================================================================== - -#ifndef SPLASHPATTERN_H -#define SPLASHPATTERN_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" - -class SplashScreen; - -//------------------------------------------------------------------------ -// SplashPattern -//------------------------------------------------------------------------ - -class SplashPattern { -public: - - SplashPattern(); - - virtual SplashPattern *copy() = 0; - - virtual ~SplashPattern(); - - // Return the color value for a specific pixel. - virtual void getColor(int x, int y, SplashColorPtr c) = 0; - - // Returns true if this pattern object will return the same color - // value for all pixels. - virtual GBool isStatic() = 0; - -private: -}; - -//------------------------------------------------------------------------ -// SplashSolidColor -//------------------------------------------------------------------------ - -class SplashSolidColor: public SplashPattern { -public: - - SplashSolidColor(SplashColorPtr colorA); - - virtual SplashPattern *copy() { return new SplashSolidColor(color); } - - virtual ~SplashSolidColor(); - - virtual void getColor(int x, int y, SplashColorPtr c); - - virtual GBool isStatic() { return gTrue; } - -private: - - SplashColor color; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashScreen.cc b/thirdparty/xpdf/3.02/src/splash/SplashScreen.cc deleted file mode 100644 index b80c14c5..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashScreen.cc +++ /dev/null @@ -1,358 +0,0 @@ -//======================================================================== -// -// SplashScreen.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "SplashMath.h" -#include "SplashScreen.h" - -//------------------------------------------------------------------------ - -static SplashScreenParams defaultParams = { - splashScreenDispersed, // type - 2, // size - 2, // dotRadius - 1.0, // gamma - 0.0, // blackThreshold - 1.0 // whiteThreshold -}; - -//------------------------------------------------------------------------ - -struct SplashScreenPoint { - int x, y; - int dist; -}; - -static int cmpDistances(const void *p0, const void *p1) { - return ((SplashScreenPoint *)p0)->dist - ((SplashScreenPoint *)p1)->dist; -} - -//------------------------------------------------------------------------ -// SplashScreen -//------------------------------------------------------------------------ - -// If is true, this generates a 45 degree screen using a -// circular dot spot function. DPI = resolution / ((size / 2) * -// sqrt(2)). If is false, this generates an optimal -// threshold matrix using recursive tesselation. Gamma correction -// (gamma = 1 / 1.33) is also computed here. -SplashScreen::SplashScreen(SplashScreenParams *params) { - Guchar u; - int black, white, i; - - if (!params) { - params = &defaultParams; - } - - // size must be a power of 2, and at least 2 - for (size = 2, log2Size = 1; size < params->size; size <<= 1, ++log2Size) ; - - switch (params->type) { - - case splashScreenDispersed: - mat = (Guchar *)gmallocn(size * size, sizeof(Guchar)); - buildDispersedMatrix(size/2, size/2, 1, size/2, 1); - break; - - case splashScreenClustered: - mat = (Guchar *)gmallocn(size * size, sizeof(Guchar)); - buildClusteredMatrix(); - break; - - case splashScreenStochasticClustered: - // size must be at least 2*r - while (size < (params->dotRadius << 1)) { - size <<= 1; - ++log2Size; - } - mat = (Guchar *)gmallocn(size * size, sizeof(Guchar)); - buildSCDMatrix(params->dotRadius); - break; - } - - sizeM1 = size - 1; - - // do gamma correction and compute minVal/maxVal - minVal = 255; - maxVal = 0; - black = splashRound((SplashCoord)255.0 * params->blackThreshold); - if (black < 1) { - black = 1; - } - white = splashRound((SplashCoord)255.0 * params->whiteThreshold); - if (white > 255) { - white = 255; - } - for (i = 0; i < size * size; ++i) { - u = splashRound((SplashCoord)255.0 * - splashPow((SplashCoord)mat[i] / 255.0, params->gamma)); - if (u < black) { - u = (Guchar)black; - } else if (u >= white) { - u = (Guchar)white; - } - mat[i] = u; - if (u < minVal) { - minVal = u; - } else if (u > maxVal) { - maxVal = u; - } - } -} - -void SplashScreen::buildDispersedMatrix(int i, int j, int val, - int delta, int offset) { - if (delta == 0) { - // map values in [1, size^2] --> [1, 255] - mat[(i << log2Size) + j] = 1 + (254 * (val - 1)) / (size * size - 1); - } else { - buildDispersedMatrix(i, j, - val, delta / 2, 4*offset); - buildDispersedMatrix((i + delta) % size, (j + delta) % size, - val + offset, delta / 2, 4*offset); - buildDispersedMatrix((i + delta) % size, j, - val + 2*offset, delta / 2, 4*offset); - buildDispersedMatrix((i + 2*delta) % size, (j + delta) % size, - val + 3*offset, delta / 2, 4*offset); - } -} - -void SplashScreen::buildClusteredMatrix() { - SplashCoord *dist; - SplashCoord u, v, d; - Guchar val; - int size2, x, y, x1, y1, i; - - size2 = size >> 1; - - // initialize the threshold matrix - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) { - mat[(y << log2Size) + x] = 0; - } - } - - // build the distance matrix - dist = (SplashCoord *)gmallocn(size * size2, sizeof(SplashCoord)); - for (y = 0; y < size2; ++y) { - for (x = 0; x < size2; ++x) { - if (x + y < size2 - 1) { - u = (SplashCoord)x + 0.5 - 0; - v = (SplashCoord)y + 0.5 - 0; - } else { - u = (SplashCoord)x + 0.5 - (SplashCoord)size2; - v = (SplashCoord)y + 0.5 - (SplashCoord)size2; - } - dist[y * size2 + x] = u*u + v*v; - } - } - for (y = 0; y < size2; ++y) { - for (x = 0; x < size2; ++x) { - if (x < y) { - u = (SplashCoord)x + 0.5 - 0; - v = (SplashCoord)y + 0.5 - (SplashCoord)size2; - } else { - u = (SplashCoord)x + 0.5 - (SplashCoord)size2; - v = (SplashCoord)y + 0.5 - 0; - } - dist[(size2 + y) * size2 + x] = u*u + v*v; - } - } - - // build the threshold matrix - x1 = y1 = 0; // make gcc happy - for (i = 0; i < size * size2; ++i) { - d = -1; - for (y = 0; y < size; ++y) { - for (x = 0; x < size2; ++x) { - if (mat[(y << log2Size) + x] == 0 && - dist[y * size2 + x] > d) { - x1 = x; - y1 = y; - d = dist[y1 * size2 + x1]; - } - } - } - // map values in [0, 2*size*size2-1] --> [1, 255] - val = 1 + (254 * (2*i)) / (2*size*size2 - 1); - mat[(y1 << log2Size) + x1] = val; - val = 1 + (254 * (2*i+1)) / (2*size*size2 - 1); - if (y1 < size2) { - mat[((y1 + size2) << log2Size) + x1 + size2] = val; - } else { - mat[((y1 - size2) << log2Size) + x1 + size2] = val; - } - } - - gfree(dist); -} - -// Compute the distance between two points on a toroid. -int SplashScreen::distance(int x0, int y0, int x1, int y1) { - int dx0, dx1, dx, dy0, dy1, dy; - - dx0 = abs(x0 - x1); - dx1 = size - dx0; - dx = dx0 < dx1 ? dx0 : dx1; - dy0 = abs(y0 - y1); - dy1 = size - dy0; - dy = dy0 < dy1 ? dy0 : dy1; - return dx * dx + dy * dy; -} - -// Algorithm taken from: -// Victor Ostromoukhov and Roger D. Hersch, "Stochastic Clustered-Dot -// Dithering" in Color Imaging: Device-Independent Color, Color -// Hardcopy, and Graphic Arts IV, SPIE Vol. 3648, pp. 496-505, 1999. -void SplashScreen::buildSCDMatrix(int r) { - SplashScreenPoint *dots, *pts; - int dotsLen, dotsSize; - char *tmpl; - char *grid; - int *region, *dist; - int x, y, xx, yy, x0, x1, y0, y1, i, j, d, iMin, dMin, n; - - //~ this should probably happen somewhere else - srand(123); - - // generate the random space-filling curve - pts = (SplashScreenPoint *)gmallocn(size * size, sizeof(SplashScreenPoint)); - i = 0; - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) { - pts[i].x = x; - pts[i].y = y; - ++i; - } - } - for (i = 0; i < size * size; ++i) { - j = i + (int)((double)(size * size - i) * - (double)rand() / ((double)RAND_MAX + 1.0)); - x = pts[i].x; - y = pts[i].y; - pts[i].x = pts[j].x; - pts[i].y = pts[j].y; - pts[j].x = x; - pts[j].y = y; - } - - // construct the circle template - tmpl = (char *)gmallocn((r+1)*(r+1), sizeof(char)); - for (y = 0; y <= r; ++y) { - for (x = 0; x <= r; ++x) { - tmpl[y*(r+1) + x] = (x * y <= r * r) ? 1 : 0; - } - } - - // mark all grid cells as free - grid = (char *)gmallocn(size * size, sizeof(char)); - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) { - grid[(y << log2Size) + x] = 0; - } - } - - // walk the space-filling curve, adding dots - dotsLen = 0; - dotsSize = 32; - dots = (SplashScreenPoint *)gmallocn(dotsSize, sizeof(SplashScreenPoint)); - for (i = 0; i < size * size; ++i) { - x = pts[i].x; - y = pts[i].y; - if (!grid[(y << log2Size) + x]) { - if (dotsLen == dotsSize) { - dotsSize *= 2; - dots = (SplashScreenPoint *)greallocn(dots, dotsSize, - sizeof(SplashScreenPoint)); - } - dots[dotsLen++] = pts[i]; - for (yy = 0; yy <= r; ++yy) { - y0 = (y + yy) % size; - y1 = (y - yy + size) % size; - for (xx = 0; xx <= r; ++xx) { - if (tmpl[yy*(r+1) + xx]) { - x0 = (x + xx) % size; - x1 = (x - xx + size) % size; - grid[(y0 << log2Size) + x0] = 1; - grid[(y0 << log2Size) + x1] = 1; - grid[(y1 << log2Size) + x0] = 1; - grid[(y1 << log2Size) + x1] = 1; - } - } - } - } - } - - gfree(tmpl); - gfree(grid); - - // assign each cell to a dot, compute distance to center of dot - region = (int *)gmallocn(size * size, sizeof(int)); - dist = (int *)gmallocn(size * size, sizeof(int)); - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) { - iMin = 0; - dMin = distance(dots[0].x, dots[0].y, x, y); - for (i = 1; i < dotsLen; ++i) { - d = distance(dots[i].x, dots[i].y, x, y); - if (d < dMin) { - iMin = i; - dMin = d; - } - } - region[(y << log2Size) + x] = iMin; - dist[(y << log2Size) + x] = dMin; - } - } - - // compute threshold values - for (i = 0; i < dotsLen; ++i) { - n = 0; - for (y = 0; y < size; ++y) { - for (x = 0; x < size; ++x) { - if (region[(y << log2Size) + x] == i) { - pts[n].x = x; - pts[n].y = y; - pts[n].dist = distance(dots[i].x, dots[i].y, x, y); - ++n; - } - } - } - qsort(pts, n, sizeof(SplashScreenPoint), &cmpDistances); - for (j = 0; j < n; ++j) { - // map values in [0 .. n-1] --> [255 .. 1] - mat[(pts[j].y << log2Size) + pts[j].x] = 255 - (254 * j) / (n - 1); - } - } - - gfree(pts); - gfree(region); - gfree(dist); - - gfree(dots); -} - -SplashScreen::SplashScreen(SplashScreen *screen) { - size = screen->size; - sizeM1 = screen->sizeM1; - log2Size = screen->log2Size; - mat = (Guchar *)gmallocn(size * size, sizeof(Guchar)); - memcpy(mat, screen->mat, size * size * sizeof(Guchar)); - minVal = screen->minVal; - maxVal = screen->maxVal; -} - -SplashScreen::~SplashScreen() { - gfree(mat); -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashScreen.h b/thirdparty/xpdf/3.02/src/splash/SplashScreen.h deleted file mode 100644 index 708c37f3..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashScreen.h +++ /dev/null @@ -1,63 +0,0 @@ -//======================================================================== -// -// SplashScreen.h -// -//======================================================================== - -#ifndef SPLASHSCREEN_H -#define SPLASHSCREEN_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" - -//------------------------------------------------------------------------ -// SplashScreen -//------------------------------------------------------------------------ - -class SplashScreen { -public: - - SplashScreen(SplashScreenParams *params); - SplashScreen(SplashScreen *screen); - ~SplashScreen(); - - SplashScreen *copy() { return new SplashScreen(this); } - - // Return the computed pixel value (0=black, 1=white) for the gray - // level at (, ). - int test(int x, int y, Guchar value) { - int xx, yy; - xx = x & sizeM1; - yy = y & sizeM1; - return value < mat[(yy << log2Size) + xx] ? 0 : 1; - } - - // Returns true if value is above the white threshold or below the - // black threshold, i.e., if the corresponding halftone will be - // solid white or black. - GBool isStatic(Guchar value) { return value < minVal || value >= maxVal; } - -private: - - void buildDispersedMatrix(int i, int j, int val, - int delta, int offset); - void buildClusteredMatrix(); - int distance(int x0, int y0, int x1, int y1); - void buildSCDMatrix(int r); - - Guchar *mat; // threshold matrix - int size; // size of the threshold matrix - int sizeM1; // size - 1 - int log2Size; // log2(size) - Guchar minVal; // any pixel value below minVal generates - // solid black - Guchar maxVal; // any pixel value above maxVal generates - // solid white -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashState.cc b/thirdparty/xpdf/3.02/src/splash/SplashState.cc deleted file mode 100644 index 37e4c073..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashState.cc +++ /dev/null @@ -1,169 +0,0 @@ -//======================================================================== -// -// SplashState.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "gmem.h" -#include "SplashPattern.h" -#include "SplashScreen.h" -#include "SplashClip.h" -#include "SplashBitmap.h" -#include "SplashState.h" - -//------------------------------------------------------------------------ -// SplashState -//------------------------------------------------------------------------ - -// number of components in each color mode -int splashColorModeNComps[] = { - 1, 1, 3, 3 -#if SPLASH_CMYK - , 4 -#endif -}; - -SplashState::SplashState(int width, int height, GBool vectorAntialias, - SplashScreenParams *screenParams) { - SplashColor color; - - matrix[0] = 1; matrix[1] = 0; - matrix[2] = 0; matrix[3] = 1; - matrix[4] = 0; matrix[5] = 0; - memset(&color, 0, sizeof(SplashColor)); - strokePattern = new SplashSolidColor(color); - fillPattern = new SplashSolidColor(color); - screen = new SplashScreen(screenParams); - blendFunc = NULL; - strokeAlpha = 1; - fillAlpha = 1; - lineWidth = 0; - lineCap = splashLineCapButt; - lineJoin = splashLineJoinMiter; - miterLimit = 10; - flatness = 1; - lineDash = NULL; - lineDashLength = 0; - lineDashPhase = 0; - strokeAdjust = gFalse; - clip = new SplashClip(0, 0, width, height, vectorAntialias); - softMask = NULL; - deleteSoftMask = gFalse; - inNonIsolatedGroup = gFalse; - overprintMask = 0xffffffff; - next = NULL; -} - -SplashState::SplashState(int width, int height, GBool vectorAntialias, - SplashScreen *screenA) { - SplashColor color; - - matrix[0] = 1; matrix[1] = 0; - matrix[2] = 0; matrix[3] = 1; - matrix[4] = 0; matrix[5] = 0; - memset(&color, 0, sizeof(SplashColor)); - strokePattern = new SplashSolidColor(color); - fillPattern = new SplashSolidColor(color); - screen = screenA->copy(); - blendFunc = NULL; - strokeAlpha = 1; - fillAlpha = 1; - lineWidth = 0; - lineCap = splashLineCapButt; - lineJoin = splashLineJoinMiter; - miterLimit = 10; - flatness = 1; - lineDash = NULL; - lineDashLength = 0; - lineDashPhase = 0; - strokeAdjust = gFalse; - clip = new SplashClip(0, 0, width, height, vectorAntialias); - softMask = NULL; - deleteSoftMask = gFalse; - inNonIsolatedGroup = gFalse; - next = NULL; -} - -SplashState::SplashState(SplashState *state) { - memcpy(matrix, state->matrix, 6 * sizeof(SplashCoord)); - strokePattern = state->strokePattern->copy(); - fillPattern = state->fillPattern->copy(); - screen = state->screen->copy(); - blendFunc = state->blendFunc; - strokeAlpha = state->strokeAlpha; - fillAlpha = state->fillAlpha; - lineWidth = state->lineWidth; - lineCap = state->lineCap; - lineJoin = state->lineJoin; - miterLimit = state->miterLimit; - flatness = state->flatness; - if (state->lineDash) { - lineDashLength = state->lineDashLength; - lineDash = (SplashCoord *)gmallocn(lineDashLength, sizeof(SplashCoord)); - memcpy(lineDash, state->lineDash, lineDashLength * sizeof(SplashCoord)); - } else { - lineDash = NULL; - lineDashLength = 0; - } - lineDashPhase = state->lineDashPhase; - strokeAdjust = state->strokeAdjust; - clip = state->clip->copy(); - softMask = state->softMask; - deleteSoftMask = gFalse; - inNonIsolatedGroup = state->inNonIsolatedGroup; - next = NULL; -} - -SplashState::~SplashState() { - delete strokePattern; - delete fillPattern; - delete screen; - gfree(lineDash); - delete clip; - if (deleteSoftMask && softMask) { - delete softMask; - } -} - -void SplashState::setStrokePattern(SplashPattern *strokePatternA) { - delete strokePattern; - strokePattern = strokePatternA; -} - -void SplashState::setFillPattern(SplashPattern *fillPatternA) { - delete fillPattern; - fillPattern = fillPatternA; -} - -void SplashState::setScreen(SplashScreen *screenA) { - delete screen; - screen = screenA; -} - -void SplashState::setLineDash(SplashCoord *lineDashA, int lineDashLengthA, - SplashCoord lineDashPhaseA) { - gfree(lineDash); - lineDashLength = lineDashLengthA; - if (lineDashLength > 0) { - lineDash = (SplashCoord *)gmallocn(lineDashLength, sizeof(SplashCoord)); - memcpy(lineDash, lineDashA, lineDashLength * sizeof(SplashCoord)); - } else { - lineDash = NULL; - } - lineDashPhase = lineDashPhaseA; -} - -void SplashState::setSoftMask(SplashBitmap *softMaskA) { - if (deleteSoftMask) { - delete softMask; - } - softMask = softMaskA; - deleteSoftMask = gTrue; -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashState.h b/thirdparty/xpdf/3.02/src/splash/SplashState.h deleted file mode 100644 index 036a51b0..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashState.h +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================== -// -// SplashState.h -// -//======================================================================== - -#ifndef SPLASHSTATE_H -#define SPLASHSTATE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" - -class SplashPattern; -class SplashScreen; -class SplashClip; -class SplashBitmap; - -//------------------------------------------------------------------------ -// line cap values -//------------------------------------------------------------------------ - -#define splashLineCapButt 0 -#define splashLineCapRound 1 -#define splashLineCapProjecting 2 - -//------------------------------------------------------------------------ -// line join values -//------------------------------------------------------------------------ - -#define splashLineJoinMiter 0 -#define splashLineJoinRound 1 -#define splashLineJoinBevel 2 - -//------------------------------------------------------------------------ -// SplashState -//------------------------------------------------------------------------ - -class SplashState { -public: - - // Create a new state object, initialized with default settings. - SplashState(int width, int height, GBool vectorAntialias, - SplashScreenParams *screenParams); - SplashState(int width, int height, GBool vectorAntialias, - SplashScreen *screenA); - - // Copy a state object. - SplashState *copy() { return new SplashState(this); } - - ~SplashState(); - - // Set the stroke pattern. This does not copy . - void setStrokePattern(SplashPattern *strokePatternA); - - // Set the fill pattern. This does not copy . - void setFillPattern(SplashPattern *fillPatternA); - - // Set the screen. This does not copy . - void setScreen(SplashScreen *screenA); - - // Set the line dash pattern. This copies the array. - void setLineDash(SplashCoord *lineDashA, int lineDashLengthA, - SplashCoord lineDashPhaseA); - - // Set the soft mask bitmap. - void setSoftMask(SplashBitmap *softMaskA); - -private: - - SplashState(SplashState *state); - - SplashCoord matrix[6]; - SplashPattern *strokePattern; - SplashPattern *fillPattern; - SplashScreen *screen; - SplashBlendFunc blendFunc; - SplashCoord strokeAlpha; - SplashCoord fillAlpha; - SplashCoord lineWidth; - int lineCap; - int lineJoin; - SplashCoord miterLimit; - SplashCoord flatness; - SplashCoord *lineDash; - int lineDashLength; - SplashCoord lineDashPhase; - GBool strokeAdjust; - SplashClip *clip; - SplashBitmap *softMask; - GBool deleteSoftMask; - GBool inNonIsolatedGroup; - Guint overprintMask; - - SplashState *next; // used by Splash class - - friend class Splash; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashT1Font.cc b/thirdparty/xpdf/3.02/src/splash/SplashT1Font.cc deleted file mode 100644 index 8219596c..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashT1Font.cc +++ /dev/null @@ -1,287 +0,0 @@ -//======================================================================== -// -// SplashT1Font.cc -// -//======================================================================== - -#include - -#if HAVE_T1LIB_H - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "SplashMath.h" -#include "SplashGlyphBitmap.h" -#include "SplashPath.h" -#include "SplashT1FontEngine.h" -#include "SplashT1FontFile.h" -#include "SplashT1Font.h" - -//------------------------------------------------------------------------ - -static Guchar bitReverse[256] = { - 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, - 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, - 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, - 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, - 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, - 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, - 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, - 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, - 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, - 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, - 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, - 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, - 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, - 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, - 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, - 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, - 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, - 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, - 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, - 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, - 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, - 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, - 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, - 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, - 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, - 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, - 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, - 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, - 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, - 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, - 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, - 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff -}; - -//------------------------------------------------------------------------ -// SplashT1Font -//------------------------------------------------------------------------ - -SplashT1Font::SplashT1Font(SplashT1FontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA): - SplashFont(fontFileA, matA, textMatA, fontFileA->engine->aa) -{ - T1_TMATRIX matrix; - BBox bbox; - SplashCoord bbx0, bby0, bbx1, bby1; - int x, y; - - t1libID = T1_CopyFont(fontFileA->t1libID); - outlineID = -1; - - // compute font size - size = (float)splashSqrt(mat[2]*mat[2] + mat[3]*mat[3]); - - // transform the four corners of the font bounding box -- the min - // and max values form the bounding box of the transformed font - bbox = T1_GetFontBBox(t1libID); - bbx0 = 0.001 * bbox.llx; - bby0 = 0.001 * bbox.lly; - bbx1 = 0.001 * bbox.urx; - bby1 = 0.001 * bbox.ury; - // some fonts are completely broken, so we fake it (with values - // large enough that most glyphs should fit) - if (bbx0 == 0 && bby0 == 0 && bbx1 == 0 && bby1 == 0) { - bbx0 = bby0 = -0.5; - bbx1 = bby1 = 1.5; - } - x = (int)(mat[0] * bbx0 + mat[2] * bby0); - xMin = xMax = x; - y = (int)(mat[1] * bbx0 + mat[3] * bby0); - yMin = yMax = y; - x = (int)(mat[0] * bbx0 + mat[2] * bby1); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - y = (int)(mat[1] * bbx0 + mat[3] * bby1); - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - x = (int)(mat[0] * bbx1 + mat[2] * bby0); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - y = (int)(mat[1] * bbx1 + mat[3] * bby0); - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - x = (int)(mat[0] * bbx1 + mat[2] * bby1); - if (x < xMin) { - xMin = x; - } else if (x > xMax) { - xMax = x; - } - y = (int)(mat[1] * bbx1 + mat[3] * bby1); - if (y < yMin) { - yMin = y; - } else if (y > yMax) { - yMax = y; - } - // This is a kludge: some buggy PDF generators embed fonts with - // zero bounding boxes. - if (xMax == xMin) { - xMin = 0; - xMax = (int)size; - } - if (yMax == yMin) { - yMin = 0; - yMax = (int)(1.2 * size); - } - // Another kludge: an unusually large xMin or yMin coordinate is - // probably wrong. - if (xMin > 0) { - xMin = 0; - } - if (yMin > 0) { - yMin = 0; - } - // Another kludge: t1lib doesn't correctly handle fonts with - // real (non-integer) bounding box coordinates. - if (xMax - xMin > 5000) { - xMin = 0; - xMax = (int)size; - } - if (yMax - yMin > 5000) { - yMin = 0; - yMax = (int)(1.2 * size); - } - - // transform the font - matrix.cxx = (double)mat[0] / size; - matrix.cxy = (double)mat[1] / size; - matrix.cyx = (double)mat[2] / size; - matrix.cyy = (double)mat[3] / size; - T1_TransformFont(t1libID, &matrix); -} - -SplashT1Font::~SplashT1Font() { - T1_DeleteFont(t1libID); - if (outlineID >= 0) { - T1_DeleteFont(outlineID); - } -} - -GBool SplashT1Font::getGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap) { - return SplashFont::getGlyph(c, 0, 0, bitmap); -} - -GBool SplashT1Font::makeGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap) { - GLYPH *glyph; - int n, i; - - if (aa) { - glyph = T1_AASetChar(t1libID, c, size, NULL); - } else { - glyph = T1_SetChar(t1libID, c, size, NULL); - } - if (!glyph) { - return gFalse; - } - - bitmap->x = -glyph->metrics.leftSideBearing; - bitmap->y = glyph->metrics.ascent; - bitmap->w = glyph->metrics.rightSideBearing - glyph->metrics.leftSideBearing; - bitmap->h = glyph->metrics.ascent - glyph->metrics.descent; - bitmap->aa = aa; - if (aa) { - bitmap->data = (Guchar *)glyph->bits; - bitmap->freeData = gFalse; - } else { - n = bitmap->h * ((bitmap->w + 7) >> 3); - bitmap->data = (Guchar *)gmalloc(n); - for (i = 0; i < n; ++i) { - bitmap->data[i] = bitReverse[glyph->bits[i] & 0xff]; - } - bitmap->freeData = gTrue; - } - - return gTrue; -} - -SplashPath *SplashT1Font::getGlyphPath(int c) { - T1_TMATRIX matrix; - SplashPath *path; - T1_OUTLINE *outline; - T1_PATHSEGMENT *seg; - T1_BEZIERSEGMENT *bez; - SplashCoord x, y, x1, y1; - GBool needClose; - - if (outlineID < 0) { - outlineID = T1_CopyFont(((SplashT1FontFile *)fontFile)->t1libID); - outlineSize = (float)splashSqrt(textMat[2]*textMat[2] + - textMat[3]*textMat[3]); - matrix.cxx = (double)textMat[0] / outlineSize; - matrix.cxy = (double)textMat[1] / outlineSize; - matrix.cyx = (double)textMat[2] / outlineSize; - matrix.cyy = (double)textMat[3] / outlineSize; - // t1lib doesn't seem to handle small sizes correctly here, so set - // the size to 1000, and scale the resulting coordinates later - outlineMul = (float)(outlineSize / 65536000.0); - outlineSize = 1000; - T1_TransformFont(outlineID, &matrix); - } - - path = new SplashPath(); - if ((outline = T1_GetCharOutline(outlineID, c, outlineSize, NULL))) { - x = 0; - y = 0; - needClose = gFalse; - for (seg = outline; seg; seg = seg->link) { - switch (seg->type) { - case T1_PATHTYPE_MOVE: - if (needClose) { - path->close(); - needClose = gFalse; - } - x += seg->dest.x * outlineMul; - y += seg->dest.y * outlineMul; - path->moveTo(x, -y); - break; - case T1_PATHTYPE_LINE: - x += seg->dest.x * outlineMul; - y += seg->dest.y * outlineMul; - path->lineTo(x, -y); - needClose = gTrue; - break; - case T1_PATHTYPE_BEZIER: - bez = (T1_BEZIERSEGMENT *)seg; - x1 = x + (SplashCoord)(bez->dest.x * outlineMul); - y1 = y + (SplashCoord)(bez->dest.y * outlineMul); - path->curveTo(x + (SplashCoord)(bez->B.x * outlineMul), - -(y + (SplashCoord)(bez->B.y * outlineMul)), - x + (SplashCoord)(bez->C.x * outlineMul), - -(y + (SplashCoord)(bez->C.y * outlineMul)), - x1, -y1); - x = x1; - y = y1; - needClose = gTrue; - break; - } - } - if (needClose) { - path->close(); - } - T1_FreeOutline(outline); - } - - return path; -} - -#endif // HAVE_T1LIB_H diff --git a/thirdparty/xpdf/3.02/src/splash/SplashT1Font.h b/thirdparty/xpdf/3.02/src/splash/SplashT1Font.h deleted file mode 100644 index 8ea74de4..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashT1Font.h +++ /dev/null @@ -1,57 +0,0 @@ -//======================================================================== -// -// SplashT1Font.h -// -//======================================================================== - -#ifndef SPLASHT1FONT_H -#define SPLASHT1FONT_H - -#include - -#if HAVE_T1LIB_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashFont.h" - -class SplashT1FontFile; - -//------------------------------------------------------------------------ -// SplashT1Font -//------------------------------------------------------------------------ - -class SplashT1Font: public SplashFont { -public: - - SplashT1Font(SplashT1FontFile *fontFileA, SplashCoord *matA, - SplashCoord *textMatA); - - virtual ~SplashT1Font(); - - // Munge xFrac and yFrac before calling SplashFont::getGlyph. - virtual GBool getGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap); - - // Rasterize a glyph. The and values are the same - // as described for getGlyph. - virtual GBool makeGlyph(int c, int xFrac, int yFrac, - SplashGlyphBitmap *bitmap); - - // Return the path for a glyph. - virtual SplashPath *getGlyphPath(int c); - -private: - - int t1libID; // t1lib font ID - int outlineID; // t1lib font ID for glyph outlines - float size; - float outlineSize; // size for glyph outlines - float outlineMul; -}; - -#endif // HAVE_T1LIB_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.cc b/thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.cc deleted file mode 100644 index ca1453a5..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.cc +++ /dev/null @@ -1,124 +0,0 @@ -//======================================================================== -// -// SplashT1FontEngine.cc -// -//======================================================================== - -#include - -#if HAVE_T1LIB_H - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#ifndef WIN32 -# include -#endif -#include -#include "GString.h" -#include "gfile.h" -#include "FoFiType1C.h" -#include "SplashT1FontFile.h" -#include "SplashT1FontEngine.h" - -#ifdef VMS -#if (__VMS_VER < 70000000) -extern "C" int unlink(char *filename); -#endif -#endif - -//------------------------------------------------------------------------ - -int SplashT1FontEngine::t1libInitCount = 0; - -//------------------------------------------------------------------------ - -static void fileWrite(void *stream, char *data, int len) { - fwrite(data, 1, len, (FILE *)stream); -} - -//------------------------------------------------------------------------ -// SplashT1FontEngine -//------------------------------------------------------------------------ - -SplashT1FontEngine::SplashT1FontEngine(GBool aaA) { - aa = aaA; -} - -SplashT1FontEngine *SplashT1FontEngine::init(GBool aaA) { - // grayVals[i] = round(i * 255 / 16) - static unsigned long grayVals[17] = { - 0, 16, 32, 48, 64, 80, 96, 112, 128, 143, 159, 175, 191, 207, 223, 239, 255 - }; - - //~ for multithreading: need a mutex here - if (t1libInitCount == 0) { - T1_SetBitmapPad(8); - if (!T1_InitLib(NO_LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE | - T1_NO_AFM)) { - return NULL; - } - if (aaA) { - T1_AASetBitsPerPixel(8); - T1_AASetLevel(T1_AA_HIGH); - T1_AAHSetGrayValues(grayVals); - } else { - T1_AANSetGrayValues(0, 1); - } - } - ++t1libInitCount; - - return new SplashT1FontEngine(aaA); -} - -SplashT1FontEngine::~SplashT1FontEngine() { - //~ for multithreading: need a mutex here - if (--t1libInitCount == 0) { - T1_CloseLib(); - } -} - -SplashFontFile *SplashT1FontEngine::loadType1Font(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - return SplashT1FontFile::loadType1Font(this, idA, fileName, deleteFile, enc); -} - -SplashFontFile *SplashT1FontEngine::loadType1CFont(SplashFontFileID *idA, - char *fileName, - GBool deleteFile, - char **enc) { - FoFiType1C *ff; - GString *tmpFileName; - FILE *tmpFile; - SplashFontFile *ret; - - if (!(ff = FoFiType1C::load(fileName))) { - return NULL; - } - tmpFileName = NULL; - if (!openTempFile(&tmpFileName, &tmpFile, "wb", NULL)) { - delete ff; - return NULL; - } - ff->convertToType1(NULL, NULL, gTrue, &fileWrite, tmpFile); - delete ff; - fclose(tmpFile); - ret = SplashT1FontFile::loadType1Font(this, idA, tmpFileName->getCString(), - gTrue, enc); - if (ret) { - if (deleteFile) { - unlink(fileName); - } - } else { - unlink(tmpFileName->getCString()); - } - delete tmpFileName; - return ret; -} - -#endif // HAVE_T1LIB_H diff --git a/thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.h b/thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.h deleted file mode 100644 index 57a04487..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashT1FontEngine.h +++ /dev/null @@ -1,53 +0,0 @@ -//======================================================================== -// -// SplashT1FontEngine.h -// -//======================================================================== - -#ifndef SPLASHT1FONTENGINE_H -#define SPLASHT1FONTENGINE_H - -#include - -#if HAVE_T1LIB_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -class SplashFontFile; -class SplashFontFileID; - -//------------------------------------------------------------------------ -// SplashT1FontEngine -//------------------------------------------------------------------------ - -class SplashT1FontEngine { -public: - - static SplashT1FontEngine *init(GBool aaA); - - ~SplashT1FontEngine(); - - // Load fonts. - SplashFontFile *loadType1Font(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - SplashFontFile *loadType1CFont(SplashFontFileID *idA, char *fileName, - GBool deleteFile, char **enc); - -private: - - SplashT1FontEngine(GBool aaA); - - static int t1libInitCount; - GBool aa; - - friend class SplashT1FontFile; - friend class SplashT1Font; -}; - -#endif // HAVE_T1LIB_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.cc b/thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.cc deleted file mode 100644 index 0dbb8f05..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.cc +++ /dev/null @@ -1,97 +0,0 @@ -//======================================================================== -// -// SplashT1FontFile.cc -// -//======================================================================== - -#include - -#if HAVE_T1LIB_H - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "SplashT1FontEngine.h" -#include "SplashT1Font.h" -#include "SplashT1FontFile.h" - -//------------------------------------------------------------------------ -// SplashT1FontFile -//------------------------------------------------------------------------ - -SplashFontFile *SplashT1FontFile::loadType1Font(SplashT1FontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, - GBool deleteFileA, - char **encA) { - int t1libIDA; - char **encTmp; - char *encStrTmp; - int encStrSize; - char *encPtr; - int i; - - // load the font file - if ((t1libIDA = T1_AddFont(fileNameA)) < 0) { - return NULL; - } - T1_LoadFont(t1libIDA); - - // reencode it - encStrSize = 0; - for (i = 0; i < 256; ++i) { - if (encA[i]) { - encStrSize += strlen(encA[i]) + 1; - } - } - encTmp = (char **)gmallocn(257, sizeof(char *)); - encStrTmp = (char *)gmallocn(encStrSize, sizeof(char)); - encPtr = encStrTmp; - for (i = 0; i < 256; ++i) { - if (encA[i]) { - strcpy(encPtr, encA[i]); - encTmp[i] = encPtr; - encPtr += strlen(encPtr) + 1; - } else { - encTmp[i] = ".notdef"; - } - } - encTmp[256] = "custom"; - T1_ReencodeFont(t1libIDA, encTmp); - - return new SplashT1FontFile(engineA, idA, fileNameA, deleteFileA, - t1libIDA, encTmp, encStrTmp); -} - -SplashT1FontFile::SplashT1FontFile(SplashT1FontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, GBool deleteFileA, - int t1libIDA, char **encA, char *encStrA): - SplashFontFile(idA, fileNameA, deleteFileA) -{ - engine = engineA; - t1libID = t1libIDA; - enc = encA; - encStr = encStrA; -} - -SplashT1FontFile::~SplashT1FontFile() { - gfree(encStr); - gfree(enc); - T1_DeleteFont(t1libID); -} - -SplashFont *SplashT1FontFile::makeFont(SplashCoord *mat, - SplashCoord *textMat) { - SplashFont *font; - - font = new SplashT1Font(this, mat, textMat); - font->initCache(); - return font; -} - -#endif // HAVE_T1LIB_H diff --git a/thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.h b/thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.h deleted file mode 100644 index 69c9caf0..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashT1FontFile.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================== -// -// SplashT1FontFile.h -// -//======================================================================== - -#ifndef SPLASHT1FONTFILE_H -#define SPLASHT1FONTFILE_H - -#include - -#if HAVE_T1LIB_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashFontFile.h" - -class SplashT1FontEngine; - -//------------------------------------------------------------------------ -// SplashT1FontFile -//------------------------------------------------------------------------ - -class SplashT1FontFile: public SplashFontFile { -public: - - static SplashFontFile *loadType1Font(SplashT1FontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, GBool deleteFileA, - char **encA); - - virtual ~SplashT1FontFile(); - - // Create a new SplashT1Font, i.e., a scaled instance of this font - // file. - virtual SplashFont *makeFont(SplashCoord *mat, - SplashCoord *textMat); - -private: - - SplashT1FontFile(SplashT1FontEngine *engineA, - SplashFontFileID *idA, - char *fileNameA, GBool deleteFileA, - int t1libIDA, char **encA, char *encStrA); - - SplashT1FontEngine *engine; - int t1libID; // t1lib font ID - char **enc; - char *encStr; - - friend class SplashT1Font; -}; - -#endif // HAVE_T1LIB_H - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashTypes.h b/thirdparty/xpdf/3.02/src/splash/SplashTypes.h deleted file mode 100644 index 6eb26073..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashTypes.h +++ /dev/null @@ -1,132 +0,0 @@ -//======================================================================== -// -// SplashTypes.h -// -//======================================================================== - -#ifndef SPLASHTYPES_H -#define SPLASHTYPES_H - -#include -#include "gtypes.h" - -//------------------------------------------------------------------------ -// coordinates -//------------------------------------------------------------------------ - -#if USE_FIXEDPOINT -#include "FixedPoint.h" -typedef FixedPoint SplashCoord; -#else -typedef double SplashCoord; -#endif - -//------------------------------------------------------------------------ -// antialiasing -//------------------------------------------------------------------------ - -#define splashAASize 4 - -//------------------------------------------------------------------------ -// colors -//------------------------------------------------------------------------ - -enum SplashColorMode { - splashModeMono1, // 1 bit per component, 8 pixels per byte, - // MSbit is on the left - splashModeMono8, // 1 byte per component, 1 byte per pixel - splashModeRGB8, // 1 byte per component, 3 bytes per pixel: - // RGBRGB... - splashModeBGR8 // 1 byte per component, 3 bytes per pixel: - // BGRBGR... - -#if SPLASH_CMYK - , - splashModeCMYK8 // 1 byte per component, 4 bytes per pixel: - // CMYKCMYK... -#endif -}; - -// number of components in each color mode -// (defined in SplashState.cc) -extern int splashColorModeNComps[]; - -// max number of components in any SplashColor -#define splashMaxColorComps 3 -#if SPLASH_CMYK -# undef splashMaxColorComps -# define splashMaxColorComps 4 -#endif - -typedef Guchar SplashColor[splashMaxColorComps]; -typedef Guchar *SplashColorPtr; - -// RGB8 -static inline Guchar splashRGB8R(SplashColorPtr rgb8) { return rgb8[0]; } -static inline Guchar splashRGB8G(SplashColorPtr rgb8) { return rgb8[1]; } -static inline Guchar splashRGB8B(SplashColorPtr rgb8) { return rgb8[2]; } - -// BGR8 -static inline Guchar splashBGR8R(SplashColorPtr bgr8) { return bgr8[2]; } -static inline Guchar splashBGR8G(SplashColorPtr bgr8) { return bgr8[1]; } -static inline Guchar splashBGR8B(SplashColorPtr bgr8) { return bgr8[0]; } - -#if SPLASH_CMYK -// CMYK8 -static inline Guchar splashCMYK8C(SplashColorPtr cmyk8) { return cmyk8[0]; } -static inline Guchar splashCMYK8M(SplashColorPtr cmyk8) { return cmyk8[1]; } -static inline Guchar splashCMYK8Y(SplashColorPtr cmyk8) { return cmyk8[2]; } -static inline Guchar splashCMYK8K(SplashColorPtr cmyk8) { return cmyk8[3]; } -#endif - -static inline void splashColorCopy(SplashColorPtr dest, SplashColorPtr src) { - dest[0] = src[0]; - dest[1] = src[1]; - dest[2] = src[2]; -#if SPLASH_CMYK - dest[3] = src[3]; -#endif -} - -static inline void splashColorXor(SplashColorPtr dest, SplashColorPtr src) { - dest[0] ^= src[0]; - dest[1] ^= src[1]; - dest[2] ^= src[2]; -#if SPLASH_CMYK - dest[3] ^= src[3]; -#endif -} - -//------------------------------------------------------------------------ -// blend functions -//------------------------------------------------------------------------ - -typedef void (*SplashBlendFunc)(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm); - -//------------------------------------------------------------------------ -// screen parameters -//------------------------------------------------------------------------ - -enum SplashScreenType { - splashScreenDispersed, - splashScreenClustered, - splashScreenStochasticClustered -}; - -struct SplashScreenParams { - SplashScreenType type; - int size; - int dotRadius; - SplashCoord gamma; - SplashCoord blackThreshold; - SplashCoord whiteThreshold; -}; - -//------------------------------------------------------------------------ -// error results -//------------------------------------------------------------------------ - -typedef int SplashError; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashXPath.cc b/thirdparty/xpdf/3.02/src/splash/SplashXPath.cc deleted file mode 100644 index 23d06131..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashXPath.cc +++ /dev/null @@ -1,468 +0,0 @@ -//======================================================================== -// -// SplashXPath.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#if HAVE_STD_SORT -#include -#endif -#include "gmem.h" -#include "SplashMath.h" -#include "SplashPath.h" -#include "SplashXPath.h" - -//------------------------------------------------------------------------ - -struct SplashXPathPoint { - SplashCoord x, y; -}; - -struct SplashXPathAdjust { - int firstPt, lastPt; // range of points - GBool vert; // vertical or horizontal hint - SplashCoord x0a, x0b, // hint boundaries - xma, xmb, - x1a, x1b; - SplashCoord x0, x1, xm; // adjusted coordinates -}; - -//------------------------------------------------------------------------ - -// Transform a point from user space to device space. -inline void SplashXPath::transform(SplashCoord *matrix, - SplashCoord xi, SplashCoord yi, - SplashCoord *xo, SplashCoord *yo) { - // [ m[0] m[1] 0 ] - // [xo yo 1] = [xi yi 1] * [ m[2] m[3] 0 ] - // [ m[4] m[5] 1 ] - *xo = xi * matrix[0] + yi * matrix[2] + matrix[4]; - *yo = xi * matrix[1] + yi * matrix[3] + matrix[5]; -} - -//------------------------------------------------------------------------ -// SplashXPath -//------------------------------------------------------------------------ - -SplashXPath::SplashXPath(SplashPath *path, SplashCoord *matrix, - SplashCoord flatness, GBool closeSubpaths) { - SplashPathHint *hint; - SplashXPathPoint *pts; - SplashXPathAdjust *adjusts, *adjust; - SplashCoord x0, y0, x1, y1, x2, y2, x3, y3, xsp, ysp; - SplashCoord adj0, adj1, w; - int ww; - int curSubpath, curSubpathX, i, j; - - // transform the points - pts = (SplashXPathPoint *)gmallocn(path->length, sizeof(SplashXPathPoint)); - for (i = 0; i < path->length; ++i) { - transform(matrix, path->pts[i].x, path->pts[i].y, &pts[i].x, &pts[i].y); - } - - // set up the stroke adjustment hints - if (path->hints) { - adjusts = (SplashXPathAdjust *)gmallocn(path->hintsLength, - sizeof(SplashXPathAdjust)); - for (i = 0; i < path->hintsLength; ++i) { - hint = &path->hints[i]; - x0 = pts[hint->ctrl0 ].x; y0 = pts[hint->ctrl0 ].y; - x1 = pts[hint->ctrl0 + 1].x; y1 = pts[hint->ctrl0 + 1].y; - x2 = pts[hint->ctrl1 ].x; y2 = pts[hint->ctrl1 ].y; - x3 = pts[hint->ctrl1 + 1].x; y3 = pts[hint->ctrl1 + 1].y; - if (x0 == x1 && x2 == x3) { - adjusts[i].vert = gTrue; - adj0 = x0; - adj1 = x2; - } else if (y0 == y1 && y2 == y3) { - adjusts[i].vert = gFalse; - adj0 = y0; - adj1 = y2; - } else { - gfree(adjusts); - adjusts = NULL; - break; - } - if (adj0 > adj1) { - x0 = adj0; - adj0 = adj1; - adj1 = x0; - } - w = adj1 - adj0; - ww = splashRound(w); - if (ww == 0) { - ww = 1; - } - adjusts[i].x0a = adj0 - 0.01; - adjusts[i].x0b = adj0 + 0.01; - adjusts[i].xma = (SplashCoord)0.5 * (adj0 + adj1) - 0.01; - adjusts[i].xmb = (SplashCoord)0.5 * (adj0 + adj1) + 0.01; - adjusts[i].x1a = adj1 - 0.01; - adjusts[i].x1b = adj1 + 0.01; - adjusts[i].x0 = (SplashCoord)splashRound(adj0); - adjusts[i].x1 = adjusts[i].x0 + ww - 0.01; - adjusts[i].xm = (SplashCoord)0.5 * (adjusts[i].x0 + adjusts[i].x1); - adjusts[i].firstPt = hint->firstPt; - adjusts[i].lastPt = hint->lastPt; - } - - } else { - adjusts = NULL; - } - - // perform stroke adjustment - if (adjusts) { - for (i = 0, adjust = adjusts; i < path->hintsLength; ++i, ++adjust) { - for (j = adjust->firstPt; j <= adjust->lastPt; ++j) { - strokeAdjust(adjust, &pts[j].x, &pts[j].y); - } - } - gfree(adjusts); - } - - segs = NULL; - length = size = 0; - - x0 = y0 = xsp = ysp = 0; // make gcc happy - adj0 = adj1 = 0; // make gcc happy - curSubpath = 0; - curSubpathX = 0; - i = 0; - while (i < path->length) { - - // first point in subpath - skip it - if (path->flags[i] & splashPathFirst) { - x0 = pts[i].x; - y0 = pts[i].y; - xsp = x0; - ysp = y0; - curSubpath = i; - curSubpathX = length; - ++i; - - } else { - - // curve segment - if (path->flags[i] & splashPathCurve) { - x1 = pts[i].x; - y1 = pts[i].y; - x2 = pts[i+1].x; - y2 = pts[i+1].y; - x3 = pts[i+2].x; - y3 = pts[i+2].y; - addCurve(x0, y0, x1, y1, x2, y2, x3, y3, - flatness, - (path->flags[i-1] & splashPathFirst), - (path->flags[i+2] & splashPathLast), - !closeSubpaths && - (path->flags[i-1] & splashPathFirst) && - !(path->flags[i-1] & splashPathClosed), - !closeSubpaths && - (path->flags[i+2] & splashPathLast) && - !(path->flags[i+2] & splashPathClosed)); - x0 = x3; - y0 = y3; - i += 3; - - // line segment - } else { - x1 = pts[i].x; - y1 = pts[i].y; - addSegment(x0, y0, x1, y1, - path->flags[i-1] & splashPathFirst, - path->flags[i] & splashPathLast, - !closeSubpaths && - (path->flags[i-1] & splashPathFirst) && - !(path->flags[i-1] & splashPathClosed), - !closeSubpaths && - (path->flags[i] & splashPathLast) && - !(path->flags[i] & splashPathClosed)); - x0 = x1; - y0 = y1; - ++i; - } - - // close a subpath - if (closeSubpaths && - (path->flags[i-1] & splashPathLast) && - (pts[i-1].x != pts[curSubpath].x || - pts[i-1].y != pts[curSubpath].y)) { - addSegment(x0, y0, xsp, ysp, - gFalse, gTrue, gFalse, gFalse); - } - } - } - - gfree(pts); -} - -// Apply the stroke adjust hints to point : (*, *). -void SplashXPath::strokeAdjust(SplashXPathAdjust *adjust, - SplashCoord *xp, SplashCoord *yp) { - SplashCoord x, y; - - if (adjust->vert) { - x = *xp; - if (x > adjust->x0a && x < adjust->x0b) { - *xp = adjust->x0; - } else if (x > adjust->xma && x < adjust->xmb) { - *xp = adjust->xm; - } else if (x > adjust->x1a && x < adjust->x1b) { - *xp = adjust->x1; - } - } else { - y = *yp; - if (y > adjust->x0a && y < adjust->x0b) { - *yp = adjust->x0; - } else if (y > adjust->xma && y < adjust->xmb) { - *yp = adjust->xm; - } else if (y > adjust->x1a && y < adjust->x1b) { - *yp = adjust->x1; - } - } -} - -SplashXPath::SplashXPath(SplashXPath *xPath) { - length = xPath->length; - size = xPath->size; - segs = (SplashXPathSeg *)gmallocn(size, sizeof(SplashXPathSeg)); - memcpy(segs, xPath->segs, length * sizeof(SplashXPathSeg)); -} - -SplashXPath::~SplashXPath() { - gfree(segs); -} - -// Add space for more segments -void SplashXPath::grow(int nSegs) { - if (length + nSegs > size) { - if (size == 0) { - size = 32; - } - while (size < length + nSegs) { - size *= 2; - } - segs = (SplashXPathSeg *)greallocn(segs, size, sizeof(SplashXPathSeg)); - } -} - -void SplashXPath::addCurve(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - SplashCoord x2, SplashCoord y2, - SplashCoord x3, SplashCoord y3, - SplashCoord flatness, - GBool first, GBool last, GBool end0, GBool end1) { - SplashCoord cx[splashMaxCurveSplits + 1][3]; - SplashCoord cy[splashMaxCurveSplits + 1][3]; - int cNext[splashMaxCurveSplits + 1]; - SplashCoord xl0, xl1, xl2, xr0, xr1, xr2, xr3, xx1, xx2, xh; - SplashCoord yl0, yl1, yl2, yr0, yr1, yr2, yr3, yy1, yy2, yh; - SplashCoord dx, dy, mx, my, d1, d2, flatness2; - int p1, p2, p3; - - flatness2 = flatness * flatness; - - // initial segment - p1 = 0; - p2 = splashMaxCurveSplits; - cx[p1][0] = x0; cy[p1][0] = y0; - cx[p1][1] = x1; cy[p1][1] = y1; - cx[p1][2] = x2; cy[p1][2] = y2; - cx[p2][0] = x3; cy[p2][0] = y3; - cNext[p1] = p2; - - while (p1 < splashMaxCurveSplits) { - - // get the next segment - xl0 = cx[p1][0]; yl0 = cy[p1][0]; - xx1 = cx[p1][1]; yy1 = cy[p1][1]; - xx2 = cx[p1][2]; yy2 = cy[p1][2]; - p2 = cNext[p1]; - xr3 = cx[p2][0]; yr3 = cy[p2][0]; - - // compute the distances from the control points to the - // midpoint of the straight line (this is a bit of a hack, but - // it's much faster than computing the actual distances to the - // line) - mx = (xl0 + xr3) * 0.5; - my = (yl0 + yr3) * 0.5; - dx = xx1 - mx; - dy = yy1 - my; - d1 = dx*dx + dy*dy; - dx = xx2 - mx; - dy = yy2 - my; - d2 = dx*dx + dy*dy; - - // if the curve is flat enough, or no more subdivisions are - // allowed, add the straight line segment - if (p2 - p1 == 1 || (d1 <= flatness2 && d2 <= flatness2)) { - addSegment(xl0, yl0, xr3, yr3, - p1 == 0 && first, - p2 == splashMaxCurveSplits && last, - p1 == 0 && end0, - p2 == splashMaxCurveSplits && end1); - p1 = p2; - - // otherwise, subdivide the curve - } else { - xl1 = (xl0 + xx1) * 0.5; - yl1 = (yl0 + yy1) * 0.5; - xh = (xx1 + xx2) * 0.5; - yh = (yy1 + yy2) * 0.5; - xl2 = (xl1 + xh) * 0.5; - yl2 = (yl1 + yh) * 0.5; - xr2 = (xx2 + xr3) * 0.5; - yr2 = (yy2 + yr3) * 0.5; - xr1 = (xh + xr2) * 0.5; - yr1 = (yh + yr2) * 0.5; - xr0 = (xl2 + xr1) * 0.5; - yr0 = (yl2 + yr1) * 0.5; - // add the new subdivision points - p3 = (p1 + p2) / 2; - cx[p1][1] = xl1; cy[p1][1] = yl1; - cx[p1][2] = xl2; cy[p1][2] = yl2; - cNext[p1] = p3; - cx[p3][0] = xr0; cy[p3][0] = yr0; - cx[p3][1] = xr1; cy[p3][1] = yr1; - cx[p3][2] = xr2; cy[p3][2] = yr2; - cNext[p3] = p2; - } - } -} - -void SplashXPath::addSegment(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - GBool first, GBool last, GBool end0, GBool end1) { - grow(1); - segs[length].x0 = x0; - segs[length].y0 = y0; - segs[length].x1 = x1; - segs[length].y1 = y1; - segs[length].flags = 0; - if (first) { - segs[length].flags |= splashXPathFirst; - } - if (last) { - segs[length].flags |= splashXPathLast; - } - if (end0) { - segs[length].flags |= splashXPathEnd0; - } - if (end1) { - segs[length].flags |= splashXPathEnd1; - } - if (y1 == y0) { - segs[length].dxdy = segs[length].dydx = 0; - segs[length].flags |= splashXPathHoriz; - if (x1 == x0) { - segs[length].flags |= splashXPathVert; - } - } else if (x1 == x0) { - segs[length].dxdy = segs[length].dydx = 0; - segs[length].flags |= splashXPathVert; - } else { -#if USE_FIXEDPOINT - if (FixedPoint::divCheck(x1 - x0, y1 - y0, &segs[length].dxdy)) { - segs[length].dydx = (SplashCoord)1 / segs[length].dxdy; - } else { - segs[length].dxdy = segs[length].dydx = 0; - if (splashAbs(x1 - x0) > splashAbs(y1 - y0)) { - segs[length].flags |= splashXPathHoriz; - } else { - segs[length].flags |= splashXPathVert; - } - } -#else - segs[length].dxdy = (x1 - x0) / (y1 - y0); - segs[length].dydx = (SplashCoord)1 / segs[length].dxdy; -#endif - } - if (y0 > y1) { - segs[length].flags |= splashXPathFlip; - } - ++length; -} - -void SplashXPath::aaScale() { - SplashXPathSeg *seg; - int i; - - for (i = 0, seg = segs; i < length; ++i, ++seg) { - seg->x0 *= splashAASize; - seg->y0 *= splashAASize; - seg->x1 *= splashAASize; - seg->y1 *= splashAASize; - } -} - -#if HAVE_STD_SORT - -struct cmpXPathSegsFunctor { - bool operator()(const SplashXPathSeg &seg0, const SplashXPathSeg &seg1) { - SplashCoord x0, y0, x1, y1; - - if (seg0.flags & splashXPathFlip) { - x0 = seg0.x1; - y0 = seg0.y1; - } else { - x0 = seg0.x0; - y0 = seg0.y0; - } - if (seg1.flags & splashXPathFlip) { - x1 = seg1.x1; - y1 = seg1.y1; - } else { - x1 = seg1.x0; - y1 = seg1.y0; - } - return (y0 != y1) ? (y0 < y1) : (x0 < x1); - } -}; - -#else // HAVE_STD_SORT - -static int cmpXPathSegs(const void *arg0, const void *arg1) { - SplashXPathSeg *seg0 = (SplashXPathSeg *)arg0; - SplashXPathSeg *seg1 = (SplashXPathSeg *)arg1; - SplashCoord x0, y0, x1, y1; - - if (seg0->flags & splashXPathFlip) { - x0 = seg0->x1; - y0 = seg0->y1; - } else { - x0 = seg0->x0; - y0 = seg0->y0; - } - if (seg1->flags & splashXPathFlip) { - x1 = seg1->x1; - y1 = seg1->y1; - } else { - x1 = seg1->x0; - y1 = seg1->y0; - } - if (y0 != y1) { - return (y0 > y1) ? 1 : -1; - } - if (x0 != x1) { - return (x0 > x1) ? 1 : -1; - } - return 0; -} - -#endif // HAVE_STD_SORT - -void SplashXPath::sort() { -#if HAVE_STD_SORT - std::sort(segs, segs + length, cmpXPathSegsFunctor()); -#else - qsort(segs, length, sizeof(SplashXPathSeg), &cmpXPathSegs); -#endif -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashXPath.h b/thirdparty/xpdf/3.02/src/splash/SplashXPath.h deleted file mode 100644 index 1745ce97..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashXPath.h +++ /dev/null @@ -1,99 +0,0 @@ -//======================================================================== -// -// SplashXPath.h -// -//======================================================================== - -#ifndef SPLASHXPATH_H -#define SPLASHXPATH_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" - -class SplashPath; -struct SplashXPathAdjust; - -//------------------------------------------------------------------------ - -#define splashMaxCurveSplits (1 << 10) - -//------------------------------------------------------------------------ -// SplashXPathSeg -//------------------------------------------------------------------------ - -struct SplashXPathSeg { - SplashCoord x0, y0; // first endpoint - SplashCoord x1, y1; // second endpoint - SplashCoord dxdy; // slope: delta-x / delta-y - SplashCoord dydx; // slope: delta-y / delta-x - Guint flags; -}; - -#define splashXPathFirst 0x01 // first segment of a subpath -#define splashXPathLast 0x02 // last segment of a subpath -#define splashXPathEnd0 0x04 // first endpoint is end of an open subpath -#define splashXPathEnd1 0x08 // second endpoint is end of an open subpath -#define splashXPathHoriz 0x10 // segment is vertical (y0 == y1) - // (dxdy is undef) -#define splashXPathVert 0x20 // segment is horizontal (x0 == x1) - // (dydx is undef) -#define splashXPathFlip 0x40 // y0 > y1 - -//------------------------------------------------------------------------ -// SplashXPath -//------------------------------------------------------------------------ - -class SplashXPath { -public: - - // Expands (converts to segments) and flattens (converts curves to - // lines) . Transforms all points from user space to device - // space, via . If is true, closes all open - // subpaths. - SplashXPath(SplashPath *path, SplashCoord *matrix, - SplashCoord flatness, GBool closeSubpaths); - - // Copy an expanded path. - SplashXPath *copy() { return new SplashXPath(this); } - - ~SplashXPath(); - - // Multiply all coordinates by splashAASize, in preparation for - // anti-aliased rendering. - void aaScale(); - - // Sort by upper coordinate (lower y), in y-major order. - void sort(); - -private: - - SplashXPath(SplashXPath *xPath); - void transform(SplashCoord *matrix, SplashCoord xi, SplashCoord yi, - SplashCoord *xo, SplashCoord *yo); - void strokeAdjust(SplashXPathAdjust *adjust, - SplashCoord *xp, SplashCoord *yp); - void grow(int nSegs); - void addCurve(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - SplashCoord x2, SplashCoord y2, - SplashCoord x3, SplashCoord y3, - SplashCoord flatness, - GBool first, GBool last, GBool end0, GBool end1); - void addSegment(SplashCoord x0, SplashCoord y0, - SplashCoord x1, SplashCoord y1, - GBool first, GBool last, GBool end0, GBool end1); - - SplashXPathSeg *segs; - int length, size; // length and size of segs array - - friend class SplashXPathScanner; - friend class SplashClip; - friend class Splash; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.cc b/thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.cc deleted file mode 100644 index abe45938..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.cc +++ /dev/null @@ -1,538 +0,0 @@ -//======================================================================== -// -// SplashXPathScanner.cc -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#if HAVE_STD_SORT -#include -#endif -#include "gmem.h" -#include "SplashMath.h" -#include "SplashXPath.h" -#include "SplashBitmap.h" -#include "SplashXPathScanner.h" - -//------------------------------------------------------------------------ - -struct SplashIntersect { - int y; - int x0, x1; // intersection of segment with [y, y+1) - int count; // EO/NZWN counter increment -}; - -#if HAVE_STD_SORT - -struct cmpIntersectFunctor { - bool operator()(const SplashIntersect &i0, const SplashIntersect &i1) { - return (i0.y != i1.y) ? (i0.y < i1.y) : (i0.x0 < i1.x0); - } -}; - -#else // HAVE_STD_SORT - -static int cmpIntersect(const void *p0, const void *p1) { - SplashIntersect *i0 = (SplashIntersect *)p0; - SplashIntersect *i1 = (SplashIntersect *)p1; - int cmp; - - if ((cmp = i0->y - i1->y) == 0) { - cmp = i0->x0 - i1->x0; - } - return cmp; -} - -#endif // HAVE_STD_SORT - -//------------------------------------------------------------------------ -// SplashXPathScanner -//------------------------------------------------------------------------ - -SplashXPathScanner::SplashXPathScanner(SplashXPath *xPathA, GBool eoA, - int clipYMin, int clipYMax) { - SplashXPathSeg *seg; - SplashCoord xMinFP, yMinFP, xMaxFP, yMaxFP; - int i; - - xPath = xPathA; - eo = eoA; - partialClip = gFalse; - - // compute the bbox - if (xPath->length == 0) { - xMin = yMin = 1; - xMax = yMax = 0; - } else { - seg = &xPath->segs[0]; - if (seg->x0 <= seg->x1) { - xMinFP = seg->x0; - xMaxFP = seg->x1; - } else { - xMinFP = seg->x1; - xMaxFP = seg->x0; - } - if (seg->flags & splashXPathFlip) { - yMinFP = seg->y1; - yMaxFP = seg->y0; - } else { - yMinFP = seg->y0; - yMaxFP = seg->y1; - } - for (i = 1; i < xPath->length; ++i) { - seg = &xPath->segs[i]; - if (seg->x0 < xMinFP) { - xMinFP = seg->x0; - } else if (seg->x0 > xMaxFP) { - xMaxFP = seg->x0; - } - if (seg->x1 < xMinFP) { - xMinFP = seg->x1; - } else if (seg->x1 > xMaxFP) { - xMaxFP = seg->x1; - } - if (seg->flags & splashXPathFlip) { - if (seg->y0 > yMaxFP) { - yMaxFP = seg->y0; - } - } else { - if (seg->y1 > yMaxFP) { - yMaxFP = seg->y1; - } - } - } - xMin = splashFloor(xMinFP); - xMax = splashFloor(xMaxFP); - yMin = splashFloor(yMinFP); - yMax = splashFloor(yMaxFP); - if (clipYMin > yMin) { - yMin = clipYMin; - partialClip = gTrue; - } - if (clipYMax < yMax) { - yMax = clipYMax; - partialClip = gTrue; - } - } - - allInter = NULL; - inter = NULL; - computeIntersections(); - interY = yMin - 1; -} - -SplashXPathScanner::~SplashXPathScanner() { - gfree(inter); - gfree(allInter); -} - -void SplashXPathScanner::getBBoxAA(int *xMinA, int *yMinA, - int *xMaxA, int *yMaxA) { - *xMinA = xMin / splashAASize; - *yMinA = yMin / splashAASize; - *xMaxA = xMax / splashAASize; - *yMaxA = yMax / splashAASize; -} - -void SplashXPathScanner::getSpanBounds(int y, int *spanXMin, int *spanXMax) { - int interBegin, interEnd, xx, i; - - if (y < yMin || y > yMax) { - interBegin = interEnd = 0; - } else { - interBegin = inter[y - yMin]; - interEnd = inter[y - yMin + 1]; - } - if (interBegin < interEnd) { - *spanXMin = allInter[interBegin].x0; - xx = allInter[interBegin].x1; - for (i = interBegin + 1; i < interEnd; ++i) { - if (allInter[i].x1 > xx) { - xx = allInter[i].x1; - } - } - *spanXMax = xx; - } else { - *spanXMin = xMax + 1; - *spanXMax = xMax; - } -} - -GBool SplashXPathScanner::test(int x, int y) { - int interBegin, interEnd, count, i; - - if (y < yMin || y > yMax) { - return gFalse; - } - interBegin = inter[y - yMin]; - interEnd = inter[y - yMin + 1]; - count = 0; - for (i = interBegin; i < interEnd && allInter[i].x0 <= x; ++i) { - if (x <= allInter[i].x1) { - return gTrue; - } - count += allInter[i].count; - } - return eo ? (count & 1) : (count != 0); -} - -GBool SplashXPathScanner::testSpan(int x0, int x1, int y) { - int interBegin, interEnd, count, xx1, i; - - if (y < yMin || y > yMax) { - return gFalse; - } - interBegin = inter[y - yMin]; - interEnd = inter[y - yMin + 1]; - count = 0; - for (i = interBegin; i < interEnd && allInter[i].x1 < x0; ++i) { - count += allInter[i].count; - } - - // invariant: the subspan [x0,xx1] is inside the path - xx1 = x0 - 1; - while (xx1 < x1) { - if (i >= interEnd) { - return gFalse; - } - if (allInter[i].x0 > xx1 + 1 && - !(eo ? (count & 1) : (count != 0))) { - return gFalse; - } - if (allInter[i].x1 > xx1) { - xx1 = allInter[i].x1; - } - count += allInter[i].count; - ++i; - } - - return gTrue; -} - -GBool SplashXPathScanner::getNextSpan(int y, int *x0, int *x1) { - int interEnd, xx0, xx1; - - if (y < yMin || y > yMax) { - return gFalse; - } - if (interY != y) { - interY = y; - interIdx = inter[y - yMin]; - interCount = 0; - } - interEnd = inter[y - yMin + 1]; - if (interIdx >= interEnd) { - return gFalse; - } - xx0 = allInter[interIdx].x0; - xx1 = allInter[interIdx].x1; - interCount += allInter[interIdx].count; - ++interIdx; - while (interIdx < interEnd && - (allInter[interIdx].x0 <= xx1 || - (eo ? (interCount & 1) : (interCount != 0)))) { - if (allInter[interIdx].x1 > xx1) { - xx1 = allInter[interIdx].x1; - } - interCount += allInter[interIdx].count; - ++interIdx; - } - *x0 = xx0; - *x1 = xx1; - return gTrue; -} - -void SplashXPathScanner::computeIntersections() { - SplashXPathSeg *seg; - SplashCoord segXMin, segXMax, segYMin, segYMax, xx0, xx1; - int x, y, y0, y1, i; - - if (yMin > yMax) { - return; - } - - // build the list of all intersections - allInterLen = 0; - allInterSize = 16; - allInter = (SplashIntersect *)gmallocn(allInterSize, - sizeof(SplashIntersect)); - for (i = 0; i < xPath->length; ++i) { - seg = &xPath->segs[i]; - if (seg->flags & splashXPathFlip) { - segYMin = seg->y1; - segYMax = seg->y0; - } else { - segYMin = seg->y0; - segYMax = seg->y1; - } - if (seg->flags & splashXPathHoriz) { - y = splashFloor(seg->y0); - if (y >= yMin && y <= yMax) { - addIntersection(segYMin, segYMax, seg->flags, - y, splashFloor(seg->x0), splashFloor(seg->x1)); - } - } else if (seg->flags & splashXPathVert) { - y0 = splashFloor(segYMin); - if (y0 < yMin) { - y0 = yMin; - } - y1 = splashFloor(segYMax); - if (y1 > yMax) { - y1 = yMax; - } - x = splashFloor(seg->x0); - for (y = y0; y <= y1; ++y) { - addIntersection(segYMin, segYMax, seg->flags, y, x, x); - } - } else { - if (seg->x0 < seg->x1) { - segXMin = seg->x0; - segXMax = seg->x1; - } else { - segXMin = seg->x1; - segXMax = seg->x0; - } - y0 = splashFloor(segYMin); - if (y0 < yMin) { - y0 = yMin; - } - y1 = splashFloor(segYMax); - if (y1 > yMax) { - y1 = yMax; - } - // this loop could just add seg->dxdy to xx1 on each iteration, - // but that introduces numerical accuracy problems - xx1 = seg->x0 + ((SplashCoord)y0 - seg->y0) * seg->dxdy; - for (y = y0; y <= y1; ++y) { - xx0 = xx1; - xx1 = seg->x0 + ((SplashCoord)(y + 1) - seg->y0) * seg->dxdy; - // the segment may not actually extend to the top and/or bottom edges - if (xx0 < segXMin) { - xx0 = segXMin; - } else if (xx0 > segXMax) { - xx0 = segXMax; - } - if (xx1 < segXMin) { - xx1 = segXMin; - } else if (xx1 > segXMax) { - xx1 = segXMax; - } - addIntersection(segYMin, segYMax, seg->flags, y, - splashFloor(xx0), splashFloor(xx1)); - } - } - } -#if HAVE_STD_SORT - std::sort(allInter, allInter + allInterLen, cmpIntersectFunctor()); -#else - qsort(allInter, allInterLen, sizeof(SplashIntersect), cmpIntersect); -#endif - - // build the list of y pointers - inter = (int *)gmallocn(yMax - yMin + 2, sizeof(int)); - i = 0; - for (y = yMin; y <= yMax; ++y) { - inter[y - yMin] = i; - while (i < allInterLen && allInter[i].y <= y) { - ++i; - } - } - inter[yMax - yMin + 1] = i; -} - -void SplashXPathScanner::addIntersection(double segYMin, double segYMax, - Guint segFlags, - int y, int x0, int x1) { - if (allInterLen == allInterSize) { - allInterSize *= 2; - allInter = (SplashIntersect *)greallocn(allInter, allInterSize, - sizeof(SplashIntersect)); - } - allInter[allInterLen].y = y; - if (x0 < x1) { - allInter[allInterLen].x0 = x0; - allInter[allInterLen].x1 = x1; - } else { - allInter[allInterLen].x0 = x1; - allInter[allInterLen].x1 = x0; - } - if (segYMin <= y && - (SplashCoord)y < segYMax && - !(segFlags & splashXPathHoriz)) { - allInter[allInterLen].count = eo ? 1 - : (segFlags & splashXPathFlip) ? 1 : -1; - } else { - allInter[allInterLen].count = 0; - } - ++allInterLen; -} - -void SplashXPathScanner::renderAALine(SplashBitmap *aaBuf, - int *x0, int *x1, int y) { - int xx0, xx1, xx, xxMin, xxMax, yy, interEnd; - Guchar mask; - SplashColorPtr p; - - memset(aaBuf->getDataPtr(), 0, aaBuf->getRowSize() * aaBuf->getHeight()); - xxMin = aaBuf->getWidth(); - xxMax = -1; - if (yMin <= yMax) { - if (splashAASize * y < yMin) { - interIdx = inter[0]; - } else if (splashAASize * y > yMax) { - interIdx = inter[yMax - yMin + 1]; - } else { - interIdx = inter[splashAASize * y - yMin]; - } - for (yy = 0; yy < splashAASize; ++yy) { - if (splashAASize * y + yy < yMin) { - interEnd = inter[0]; - } else if (splashAASize * y + yy > yMax) { - interEnd = inter[yMax - yMin + 1]; - } else { - interEnd = inter[splashAASize * y + yy - yMin + 1]; - } - interCount = 0; - while (interIdx < interEnd) { - xx0 = allInter[interIdx].x0; - xx1 = allInter[interIdx].x1; - interCount += allInter[interIdx].count; - ++interIdx; - while (interIdx < interEnd && - (allInter[interIdx].x0 <= xx1 || - (eo ? (interCount & 1) : (interCount != 0)))) { - if (allInter[interIdx].x1 > xx1) { - xx1 = allInter[interIdx].x1; - } - interCount += allInter[interIdx].count; - ++interIdx; - } - if (xx0 < 0) { - xx0 = 0; - } - ++xx1; - if (xx1 > aaBuf->getWidth()) { - xx1 = aaBuf->getWidth(); - } - // set [xx0, xx1) to 1 - if (xx0 < xx1) { - xx = xx0; - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + (xx >> 3); - if (xx & 7) { - mask = 0xff >> (xx & 7); - if ((xx & ~7) == (xx1 & ~7)) { - mask &= (Guchar)(0xff00 >> (xx1 & 7)); - } - *p++ |= mask; - xx = (xx & ~7) + 8; - } - for (; xx + 7 < xx1; xx += 8) { - *p++ |= 0xff; - } - if (xx < xx1) { - *p |= (Guchar)(0xff00 >> (xx1 & 7)); - } - } - if (xx0 < xxMin) { - xxMin = xx0; - } - if (xx1 > xxMax) { - xxMax = xx1; - } - } - } - } - *x0 = xxMin / splashAASize; - *x1 = (xxMax - 1) / splashAASize; -} - -void SplashXPathScanner::clipAALine(SplashBitmap *aaBuf, - int *x0, int *x1, int y) { - int xx0, xx1, xx, yy, interEnd; - Guchar mask; - SplashColorPtr p; - - for (yy = 0; yy < splashAASize; ++yy) { - xx = *x0 * splashAASize; - if (yMin <= yMax) { - if (splashAASize * y + yy < yMin) { - interIdx = interEnd = inter[0]; - } else if (splashAASize * y + yy > yMax) { - interIdx = interEnd = inter[yMax - yMin + 1]; - } else { - interIdx = inter[splashAASize * y + yy - yMin]; - if (splashAASize * y + yy > yMax) { - interEnd = inter[yMax - yMin + 1]; - } else { - interEnd = inter[splashAASize * y + yy - yMin + 1]; - } - } - interCount = 0; - while (interIdx < interEnd && xx < (*x1 + 1) * splashAASize) { - xx0 = allInter[interIdx].x0; - xx1 = allInter[interIdx].x1; - interCount += allInter[interIdx].count; - ++interIdx; - while (interIdx < interEnd && - (allInter[interIdx].x0 <= xx1 || - (eo ? (interCount & 1) : (interCount != 0)))) { - if (allInter[interIdx].x1 > xx1) { - xx1 = allInter[interIdx].x1; - } - interCount += allInter[interIdx].count; - ++interIdx; - } - if (xx0 > aaBuf->getWidth()) { - xx0 = aaBuf->getWidth(); - } - // set [xx, xx0) to 0 - if (xx < xx0) { - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + (xx >> 3); - if (xx & 7) { - mask = (Guchar)(0xff00 >> (xx & 7)); - if ((xx & ~7) == (xx0 & ~7)) { - mask |= 0xff >> (xx0 & 7); - } - *p++ &= mask; - xx = (xx & ~7) + 8; - } - for (; xx + 7 < xx0; xx += 8) { - *p++ = 0x00; - } - if (xx < xx0) { - *p &= 0xff >> (xx0 & 7); - } - } - if (xx1 >= xx) { - xx = xx1 + 1; - } - } - } - xx0 = (*x1 + 1) * splashAASize; - // set [xx, xx0) to 0 - if (xx < xx0) { - p = aaBuf->getDataPtr() + yy * aaBuf->getRowSize() + (xx >> 3); - if (xx & 7) { - mask = (Guchar)(0xff00 >> (xx & 7)); - if ((xx & ~7) == (xx0 & ~7)) { - mask &= 0xff >> (xx0 & 7); - } - *p++ &= mask; - xx = (xx & ~7) + 8; - } - for (; xx + 7 < xx0; xx += 8) { - *p++ = 0x00; - } - if (xx < xx0) { - *p &= 0xff >> (xx0 & 7); - } - } - } -} diff --git a/thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.h b/thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.h deleted file mode 100644 index 5bb3aaf4..00000000 --- a/thirdparty/xpdf/3.02/src/splash/SplashXPathScanner.h +++ /dev/null @@ -1,95 +0,0 @@ -//======================================================================== -// -// SplashXPathScanner.h -// -//======================================================================== - -#ifndef SPLASHXPATHSCANNER_H -#define SPLASHXPATHSCANNER_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" - -class SplashXPath; -class SplashBitmap; -struct SplashIntersect; - -//------------------------------------------------------------------------ -// SplashXPathScanner -//------------------------------------------------------------------------ - -class SplashXPathScanner { -public: - - // Create a new SplashXPathScanner object. must be sorted. - SplashXPathScanner(SplashXPath *xPathA, GBool eoA, - int clipYMin, int clipYMax); - - ~SplashXPathScanner(); - - // Return the path's bounding box. - void getBBox(int *xMinA, int *yMinA, int *xMaxA, int *yMaxA) - { *xMinA = xMin; *yMinA = yMin; *xMaxA = xMax; *yMaxA = yMax; } - - // Return the path's bounding box. - void getBBoxAA(int *xMinA, int *yMinA, int *xMaxA, int *yMaxA); - - // Returns true if at least part of the path was outside the - // clipYMin/clipYMax bounds passed to the constructor. - GBool hasPartialClip() { return partialClip; } - - // Return the min/max x values for the span at . - void getSpanBounds(int y, int *spanXMin, int *spanXMax); - - // Returns true if (,) is inside the path. - GBool test(int x, int y); - - // Returns true if the entire span ([,], ) is inside the - // path. - GBool testSpan(int x0, int x1, int y); - - // Returns the next span inside the path at . If is - // different than the previous call to getNextSpan, this returns the - // first span at ; otherwise it returns the next span (relative - // to the previous call to getNextSpan). Returns false if there are - // no more spans at . - GBool getNextSpan(int y, int *x0, int *x1); - - // Renders one anti-aliased line into . Returns the min and - // max x coordinates with non-zero pixels in and . - void renderAALine(SplashBitmap *aaBuf, int *x0, int *x1, int y); - - // Clips an anti-aliased line by setting pixels to zero. On entry, - // all non-zero pixels are between and . This function - // will update and . - void clipAALine(SplashBitmap *aaBuf, int *x0, int *x1, int y); - -private: - - void computeIntersections(); - void addIntersection(double segYMin, double segYMax, - Guint segFlags, - int y, int x0, int x1); - - SplashXPath *xPath; - GBool eo; - int xMin, yMin, xMax, yMax; - GBool partialClip; - - SplashIntersect *allInter; // array of intersections - int allInterLen; // number of intersections in - int allInterSize; // size of the array - int *inter; // indexes into for each y value - int interY; // current y value - used by getNextSpan - int interIdx; // current index into - used by - // getNextSpan - int interCount; // current EO/NZWN counter - used by - // getNextSpan -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/splash/vms_make.com b/thirdparty/xpdf/3.02/src/splash/vms_make.com deleted file mode 100644 index e69de29b..00000000 diff --git a/thirdparty/xpdf/3.02/src/vms_make.com b/thirdparty/xpdf/3.02/src/vms_make.com deleted file mode 100644 index d70caad7..00000000 --- a/thirdparty/xpdf/3.02/src/vms_make.com +++ /dev/null @@ -1,736 +0,0 @@ -$!======================================================================== -$! -$! Main Xpdf compile script for VMS. -$! -$! Written by Patrick Moreau, Martin P.J. Zinser. -$! -$! Copyright 1996-2003 Glyph & Cog, LLC -$! -$!======================================================================== -$! -$! This procedure takes up to three (optional) parameters: -$! -$! 1.) Configuration settings: -$! -$! a4 - Use european A4 as the default paper size. -$! -$! no_text_select - Disable text selection in Xpdf -$! -$! opi_support - Compile Xpdf with support for the Open Prepress -$! Interface (OPI) -$! -$! 2.) Compiler detection: -$! -$! In case you want to override the automatic compiler detection -$! specify either DECC or GCC as the second paramter, -$! e.g. @vms_make "" GCC -$! -$! 3.) System Xpdf resource file -$! -$! The default for this is decw$system_defaults:xpdfrc.dat, since this -$! is the standard place for systemwide Xdefaults files on OpenVMS. You -$! may provide a different file in p3. -$! -$! External libraries (like T1lib, Freetype, and XPM) are supported via the -$! config file VMSLIB.DAT. Please check the sample file, which will be created -$! by this procedure upon first invocation, for the information you need to -$! provide -$! -$! Sample invocation of the script: -$! @vms_make a4,opi_support "" -$! -$! In case of problems with the compile you may contact me at -$! zinser@decus.de (preferred) or zinser@sysdev.deutsche-boerse.com (work). -$! -$!======================================================================== -$! -$ on error then goto err_exit -$! -$! -$! Just some general constants... -$! -$ true = 1 -$ false = 0 -$ xpdf_link :== link -$ tmpnam = "temp_" + f$getjpi("","pid") -$ tc = tmpnam + ".c" -$! -$! Setup variables holding "config" information -$! -$ aconf_in_file = "aconf_h.in#aconf.h_in#aconf.h.in" -$ name = "Xpdf" -$ version = "?.?" -$ mydefs = "#" -$ xlibs = "xt#xmu#motif" -$ cxxdefs = "" -$ libdefs = "\" -$ libincs = "" -$ float = "" -$ compress_def = false -$ ft2def = false -$ x11_save = "" -$ p2 = f$edit(p2,"upcase,trim") -$ if f$edit(p3,"trim") .eqs. "" -$ then -$ resfil = "decw$system_defaults:xpdfrc.dat" -$ else -$ resfil = "'p3'" -$ endif -$! -$ gosub proc_config -$ gosub check_version -$! -$! Start building the option file -$! -$ open/write optf xpdf.opt -$ open/write topt tmp.opt -$ write optf "Identification=""''name' ''version'""" -$ gosub check_create_vmslib -$ gosub check_xlib -$! -$ if (f$getsyi("HW_MODEL").ge.1024) .and. - - (f$locate("T1LIB",f$edit(libdefs,"UPCASE")) .lt. f$length(libdefs)) - - then float = "/float=ieee_float" -$ incs = "sys$library:,[-],[],[-.goo]''libincs'" -$! -$ gosub check_compiler -$ close optf -$ close topt -$! -$! aconf.h.in might be mapped in different ways, so go figure -$! -$ i = 0 -$FIND_ACONF: -$ fname = f$element(i,"#",aconf_in_file) -$ if fname .eqs. "#" then goto AMISS_ERR -$ if f$search(fname) .eqs. "" -$ then -$ i = i + 1 -$ goto find_aconf -$ endif -$ open/read/err=aconf_err aconf_in 'fname' -$ open/write aconf aconf.h -$ACONF_LOOP: -$ read/end_of_file=aconf_exit aconf_in line -$ work = f$edit(line, "compress,trim") -$ if f$extract(0,6,work) .nes. "#undef" -$ then -$ write aconf line -$ else -$ def = f$element(1," ",work) -$ if ((f$locate("\''def'\",f$edit(libdefs,"UPCASE")) .lt. f$length(libdefs)) - - .or. (f$locate("#''def'#",f$edit(mydefs,"UPCASE")) .lt. f$length(mydefs))) -$ then -$ write aconf "#define ", def, " 1" -$ else -$ gosub check_config -$ endif -$ endif -$! -$! Make sure old-style VMS is defined along with __VMS -$! -$ if f$locate("define ACONF_H",line) .lt. f$length(line) -$ then -$ write aconf "#define VMS 1" -$ endif -$ goto aconf_loop -$ACONF_EXIT: -$ close aconf_in -$ close aconf -$ write sys$output "Compiling in [.GOO]" -$ set default [.goo] -$ @vms_make -$ write sys$output "Compiling in [.XPDF]" -$ set default [-.xpdf] -$ @vms_make -$ set default [-] -$ gosub reset_env -$ dele/noconf/nolog tmp.opt;* -$ exit -$ACONF_ERR: -$ write sys$output "Input file ''fname' could not be opened" -$ goto err_exit -$AMISS_ERR: -$ write sys$output "No source for aconf.h found." -$ write sys$output "Tried any of ''aconf_in_file'" -$CXX_ERR: -$ write sys$output "C++ compiler required to build Xpdf" -$ goto err_exit -$FT2_ERR: -$ write sys$output "Can not find [.internal] sub-dir in Freetype 2 tree" -$ goto err_exit -$ERR_EXIT: -$ set message/facil/ident/sever/text -$ gosub reset_env -$ close/nolog aconf_in -$ close/nolog aconf -$ close/nolog optf -$ close/nolog tmpc -$ close/nolop topt -$ write sys$output "Exiting..." -$ exit 2 -$!------------------------------------------------------------------------------ -$! -$! Take care of driver file with information about external libraries -$! -$CHECK_CREATE_VMSLIB: -$! -$ if f$search("VMSLIB.DAT") .eqs. "" -$ then -$ type/out=vmslib.dat sys$input -! -! This is a simple driver file with information used by vms_make.com to -! check if external libraries (like t1lib and freetype) are available on -! the system. -! -! Layout of the file: -! -! - Lines starting with ! are treated as comments -! - Elements in a data line are separated by # signs -! - The elements need to be listed in the following order -! 1.) Name of the Library (only used for informative messages -! from vms_make.com) -! 2.) Location where the object library can be found -! 3.) Location where the include files for the library can be found -! 4.) Include file used to verify library location -! 5.) CPP define to pass to the build to indicate availability of -! the library -! -! Example: The following lines show how definitions -! might look like. They are site specific and the locations of the -! library and include files need almost certainly to be changed. -! -! Location: All of the libaries can be found at the following addresses -! -! T1LIB: http://www.decus.de:8080/www/vms/sw/t1lib.htmlx -! FREETYPE: http://www.decus.de:8080/www/vms/sw/freetype2.htmlx -! XPM: http://www.decus.de:8080/www/vms/sw/xpm.htmlx -! LIBPAPER: http://www.decus.de:8080/www/vms/sw/libpaper.htmlx -! -!T1LIB # pubbin:t1shr.exe # public$root:[xtools.libs.t1lib.lib.t1lib] # t1lib.h # HAVE_T1LIB_H -!FREETYPE # pubbin:freetype2shr.exe # public$root:[xtools.libs.ft2.include.freetype],public$root:[xtools.libs.ft2.include] # freetype.h # HAVE_FREETYPE_H\FREETYPE2 -!XPM # pubbin:libxpm.olb # X11: # xpm.h # HAVE_X11_XPM_H -!LIBPAPER # pubbin:libpapershr.exe # public$root:[util.libs.paper.lib] # paper.h # HAVE_PAPER_H -$ write sys$output "New driver file vmslib.dat created." -$ write sys$output "Please customize libary locations for your site" -$ write sys$output "and afterwards re-execute vms_make.com" -$ write sys$output "Exiting..." -$ close/nolog optf -$ exit -$ endif -$! -$! Open data file with location of libraries -$! -$ open/read/end=end_lib/err=err_lib libdata VMSLIB.DAT -$LIB_LOOP: -$ read/end=end_lib libdata libline -$ libline = f$edit(libline, "UNCOMMENT,COLLAPSE") -$ if libline .eqs. "" then goto LIB_LOOP ! Comment line -$ libname = f$edit(f$element(0,"#",libline),"UPCASE") -$ write sys$output "Processing ''libname' setup ..." -$ libloc = f$element(1,"#",libline) -$ libsrc = f$element(2,"#",libline) -$ testinc = f$element(3,"#",libline) -$ cppdef = f$element(4,"#",libline) -$ old_cpp = f$locate("=1",cppdef) -$ if old_cpp.lt.f$length(cppdef) then cppdef = f$extract(0,old_cpp,cppdef) -$ if f$search("''libloc'").eqs. "" -$ then -$ write sys$output "Can not find library ''libloc' - Skipping ''libname'" -$ goto LIB_LOOP -$ endif -$ libsrc_elem = 0 -$ libsrc_found = false -$LIBSRC_LOOP: -$ libsrcdir = f$element(libsrc_elem,",",libsrc) -$ if (libsrcdir .eqs. ",") then goto END_LIBSRC -$ if f$search("''libsrcdir'''testinc'") .nes. "" then libsrc_found = true -$ libsrc_elem = libsrc_elem + 1 -$ goto LIBSRC_LOOP -$END_LIBSRC: -$ if .not. libsrc_found -$ then -$ write sys$output "Can not find includes at ''libsrc' - Skipping ''libname'" -$ goto LIB_LOOP -$ endif -$ libdefs = libdefs + cppdef + "\" -$ libincs = libincs + "," + libsrc -$ lqual = "/lib" -$ libtype = f$edit(f$parse(libloc,,,"TYPE"),"UPCASE") -$ if f$locate("EXE",libtype) .lt. f$length(libtype) then lqual = "/share" -$ write optf libloc , lqual -$ write topt libloc , lqual -$! -$! Nasty hack to get the freetype includes to work -$! -$ if ((libname .eqs. "FREETYPE") .and. - - (f$locate("FREETYPE2",cppdef) .lt. f$length(cppdef))) -$ then -$ if ((f$search("freetype:freetype.h") .nes. "") .and. - - (f$search("freetype:[internal]ftobjs.h") .nes. "")) -$ then -$ write sys$output "Will use local definition of freetype logical" -$ ft2def = false -$ else -$ ft2elem = 0 -$FT2_LOOP: -$ ft2srcdir = f$element(ft2elem,",",libsrc) -$ if f$search("''ft2srcdir'''testinc'") .nes. "" -$ then -$ if f$search("''ft2srcdir'internal.dir") .nes. "" -$ then -$ ft2dev = f$parse("''ft2srcdir'",,,"device","no_conceal") -$ ft2dir = f$parse("''ft2srcdir'",,,"directory","no_conceal") -$ ft2conc = f$locate("][",ft2dir) -$ ft2len = f$length(ft2dir) -$ if ft2conc .lt. ft2len -$ then -$ ft2dir = f$extract(0,ft2conc,ft2dir) + - - f$extract(ft2conc+2,ft2len-2,ft2dir) -$ endif -$ ft2dir = ft2dir - "]" + ".]" -$ define freetype 'ft2dev''ft2dir','ft2srcdir' -$ ft2def = true -$ else -$ goto ft2_err -$ endif -$ else -$ ft2elem = ft2elem + 1 -$ goto ft2_loop -$ endif -$ endif -$ endif -$! -$! Yet another special treatment for Xpm/X11 -$! -$ if (libname .eqs. "XPM") -$ then -$ my_x11 = f$parse("''libsrc'xpm.h",,,"device") + - - f$parse("''libsrc'xpm.h",,,"directory") -$ x11_save = f$trnlnm("X11") -$ define x11 'my_x11',decw$include -$ endif -$ goto LIB_LOOP -$END_LIB: -$ close libdata -$ return -$!------------------------------------------------------------------------------ -$! -$! Take care of driver file with information about external libraries -$! -$CHECK_CONFIG: -$! -$ if (def .eqs. "SYSTEM_XPDFRC") -$ then -$ write aconf "#define SYSTEM_XPDFRC """, resfil, """" -$ else -$ gosub check_cc_def -$ endif -$ return -$!------------------------------------------------------------------------------ -$! -$! Check if this is a define relating to the properties of the C/C++ -$! compiler -$! -$CHECK_CC_DEF: -$ if (def .eqs. "HAVE_DIRENT_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_NDIR_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_DIR_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_NDIR_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_SELECT_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_SYS_BSDTYPES_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_STRINGS_H") -$ then -$ copy sys$input: 'tc -$ deck -#include -int main(){ -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_POPEN") -$ then -$ copy sys$input: 'tc -$ deck -#include - -int main(){ -FILE *pipe; - pipe = popen("DIR","r"); - pclose(pipe); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_MKSTEMP") -$ then -$ copy sys$input: 'tc -$ deck -#include - -int main(){ - mkstemp("tempXXXXXX"); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_FSEEKO") -$ then -$ copy sys$input: 'tc -$ deck -#define _LARGEFILE -#include - -int main(){ -FILE *fp; - fp = fopen("temp.txt","r"); - fseeko(fp,1,SEEK_SET); - fclose(fp); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "_LARGE_FILES") -$ then -$ copy sys$input: 'tc -$ deck -#define _LARGEFILE -#include - -int main(){ -FILE *fp; - fp = fopen("temp.txt","r"); - fseeko(fp,1,SEEK_SET); - fclose(fp); -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ if (def .eqs. "HAVE_XTAPPSETEXITFLAG") -$ then -$ copy sys$input: 'tc -$ deck -#include - -int main(){ - XtAppContext app_context; - app_context = XtCreateApplicationContext(); - XtAppSetExitFlag(app_context); - return 0; -} -$ eod -$ gosub cc_prop_check -$ return -$ endif -$ write aconf "/* ", line, " */" -$ return -$!------------------------------------------------------------------------------ -$! -$! Process config settings passed from the command line -$! (analog to Unix --enable-xxx) -$! -$PROC_CONFIG: -$ if (p1.nes."") -$ then -$ i = 0 -$ qual_list = f$edit(p1,"upcase") -$DEF_LOOP: -$ qual = f$element(i,",",qual_list) -$ if qual .eqs. "," then goto FINISH_DEF -$ i = i + 1 -$ if (qual .eqs. "A4") -$ then -$ mydefs = mydefs + "A4_PAPER#" -$ goto def_loop -$ endif -$ if (qual .eqs. "NO_TEXT_SELECT") -$ then -$ mydefs = mydefs + "NO_TEXT_SELECT#" -$ goto def_loop -$ endif -$ if (qual .eqs. "OPI_SUPPORT") -$ then -$ mydefs = mydefs + "OPI_SUPPORT#" -$ goto def_loop -$ endif -$ if (qual .eqs. "COMPRESS") -$ then -$ compress_def = true -$ goto def_loop -$ endif -$ write sys$output "Qualifier ''qual' not recognized, will be ignored" -$ goto def_loop -$ endif -$FINISH_DEF: -$ return -$! -$!------------------------------------------------------------------------------ -$! -$! Look for the compiler used -$! -$CHECK_COMPILER: -$ its_decc = (f$search("SYS$SYSTEM:CXX$COMPILER.EXE") .nes. "") -$ its_gnuc = .not. its_decc .and. (f$trnlnm("gnu_cc") .nes. "") -$! -$! Exit if no compiler available -$! -$ if (.not. (its_decc .or. its_gnuc)) then goto CXX_ERR -$! -$! Override if requested from the commandline -$! -$ if (p2 .eqs. "DECC") -$ then -$ its_decc = true -$ its_gnuc = false -$ endif -$ if (p1 .eqs. "GNUC") -$ then -$ its_decc = false -$ its_gnuc = true -$ endif -$! -$ if its_decc -$ then -$ ccomp :== "cc/decc/prefix=all ''float'" -$! -$! Take care of includes -$! -$ cc_user = f$trnlnm("DECC$USER_INCLUDE") -$ cc_system = f$trnlnm("DECC$SYSTEM_INCLUDE") -$ cxx_user = f$trnlnm("CXX$USER_INCLUDE") -$ cxx_system = f$trnlnm("CXX$SYSTEM_INCLUDE") -$ define decc$system_include 'incs' -$ define decc$user_include 'incs' -$ define cxx$user_include 'incs' -$ define cxx$system_include 'incs' -$! -$! Check version of the C++ compiler -$! -$ create vms_xpdf_cc_test.cc -$ cxx/lis=vms_xpdf_cc_test.lis/show=all vms_xpdf_cc_test.cc -$ open list vms_xpdf_cc_test.lis -$CXX_LIST: -$ read/end=close_cxx list line -$ start = f$locate("__DECCXX_VER",line) -$ if start .ne. f$length(line) -$ then -$ cxx_ver = f$extract(start+13,8,line) -$ if cxx_ver .gt. 60000000 -$ then -$ cxxdefs = "/warn=(disable=nosimpint)" -$ xpdf_link :== cxxlink -$ endif -$ goto close_cxx -$ endif -$ goto cxx_list -$CLOSE_CXX: -$ close list -$ delete/noconfirm vms_xpdf_cc_test.*;* -$ cxxcomp :== "cxx/prefix=all ''cxxdefs' ''float' /include=cxx$user_include" -$ endif -$! -$ if its_gnuc -$ then -$ ccomp :== "gcc/nocase/include=(''incs')" -$ cxxcomp :== "gcc/plusplus/nocase/include=(''incs')" -$ write optf "gnu_cc:[000000]gcclib.olb/lib" -$ write optf "sys$share:vaxcrtl.exe/share" -$ endif -$ return -$------------------------------------------------------------------------------- -$RESET_ENV: -$ delete/sym/glob cxxcomp -$ delete/sym/glob ccomp -$ delete/sym/glob xpdf_link -$ if (ft2def) then deassign freetype -$ if its_decc -$ then -$ if cc_user .eqs. "" -$ then -$ deass decc$user_include -$ else -$ define decc$user_include 'cc_user' -$ endif -$ if cc_system .eqs. "" -$ then -$ deass decc$system_include -$ else -$ define decc$system_include 'cc_system' -$ endif -$ if cxx_user .eqs. "" -$ then -$ deass cxx$user_include -$ else -$ define cxx$user_include 'cxx_user' -$ endif -$ if cxx_system .eqs. "" -$ then -$ deass cxx$system_include -$ else -$ define cxx$system_include 'cxx_system' -$ endif -$ endif -$ if (x11_save .nes. "") then define x11 'x11_save' -$ return -$! -$!------------------------------------------------------------------------------ -$! -$! Check for properties of C/C++ compiler -$! -$CC_PROP_CHECK: -$ cc_prop = true -$ set message/nofac/noident/nosever/notext -$ on error then continue -$ cc 'tmpnam' -$ if .not. ($status) then cc_prop = false -$ on error then continue -$! The headers might lie about the capabilities of the RTL -$ link/opt=tmp.opt 'tmpnam' -$ if .not. ($status) then cc_prop = false -$ set message/fac/ident/sever/text -$ on error then goto err_exit -$ delete/nolog 'tmpnam'.*;* -$ if cc_prop -$ then -$ write sys$output "Checking for ''def'... yes" -$ write aconf "#define ''def' 1" -$ if (def .eqs. "HAVE_FSEEKO") .or. (def .eqs. "_LARGE_FILES") then - - write aconf "#define _LARGEFILE" -$ else -$ write sys$output "Checking for ''def'... no" -$ write aconf line -$ endif -$ return -$!------------------------------------------------------------------------------ -$! -$! Check Xlibs and write to options file -$! -$CHECK_XLIB: -$ If F$Type (xlibs) .nes. "STRING" Then xlibs = "" -$ need_xt = f$locate("XT",f$edit(xlibs,"upcase")) .lt. f$length(xlibs) -$ need_xmu = f$locate("XMU",f$edit(xlibs,"upcase")) .lt. f$length(xlibs) -$ need_xm = f$locate("MOTIF",f$edit(xlibs,"upcase")) .lt. f$length(xlibs) -$ On Error Then GoTo XUI -$ @sys$update:decw$get_image_version sys$share:decw$xlibshr.exe decw$version -$ if f$extract(4,3,decw$version).eqs."1.0" -$ then -$ if need_xt .or. need_xmu .or. need_xm -$ then -$ write optf "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ write topt "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ endif -$ endif -$ if f$extract(4,3,decw$version).eqs."1.1" -$ then -$ if need_xm then write optf "sys$share:decw$xmlibshr.exe/share" -$ if need_xt then write optf "sys$share:decw$xtshr.exe/share" -$ if nedd_xmu then write optf "sys$share:decw$xmulibshr.exe/share" -$ if need_xm then write topt "sys$share:decw$xmlibshr.exe/share" -$ if need_xt then write topt "sys$share:decw$xtshr.exe/share" -$ if nedd_xmu then write topt "sys$share:decw$xmulibshr.exe/share" -$ endif -$ if f$extract(4,3,decw$version).eqs."1.2" -$ then -$ if need_xm then write optf "sys$share:decw$xmlibshr12.exe/share" -$ if need_xt then write optf "sys$share:decw$xtlibshrr5.exe/share" -$ if need_xmu then write optf "sys$share:decw$xmulibshrr5.exe/share" -$ if need_xm then write topt "sys$share:decw$xmlibshr12.exe/share" -$ if need_xt then write topt "sys$share:decw$xtlibshrr5.exe/share" -$ if need_xmu then write topt "sys$share:decw$xmulibshrr5.exe/share" -$ endif -$ GoTo MAIN -$ XUI: -$! -$ if need_xt .or. need_xmu -$ then -$ write optf "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ write topt "Sys$share:DECW$DWTLIBSHR.EXE/Share" -$ endif -$ MAIN: -$ on error then goto err_exit -$ write optf "sys$share:decw$xlibshr.exe/share" -$ write topt "sys$share:decw$xlibshr.exe/share" -$ return -$!------------------------------------------------------------------------------ -$! -$! Check version of Xpdf to build -$! -$CHECK_VERSION: -$ open/read in [.xpdf]config.h -$ check_string = "xpdfVersionNum" -$vloop: -$ read/end=vdone in rec -$ if (f$element(1," " ,rec) .nes. check_string) then goto vloop -$ start = f$locate(check_string,rec) + f$length(check_string) -$ len = f$length(rec) - start -$ version = f$edit(f$extract(start,len,rec),"COLLAPSE") -$vdone: -$ close in -$ return -$!------------------------------------------------------------------------------ diff --git a/thirdparty/xpdf/3.02/src/xpdf/Annot.cc b/thirdparty/xpdf/3.02/src/xpdf/Annot.cc deleted file mode 100644 index 4d28ab16..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Annot.cc +++ /dev/null @@ -1,1638 +0,0 @@ -//======================================================================== -// -// Annot.cc -// -// Copyright 2000-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "GList.h" -#include "Error.h" -#include "Object.h" -#include "Catalog.h" -#include "Gfx.h" -#include "GfxFont.h" -#include "Lexer.h" -#include "PDFDoc.h" -#include "OptionalContent.h" -#include "Annot.h" - -//------------------------------------------------------------------------ - -#define annotFlagHidden 0x0002 -#define annotFlagPrint 0x0004 -#define annotFlagNoView 0x0020 - -#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 - -//------------------------------------------------------------------------ -// AnnotBorderStyle -//------------------------------------------------------------------------ - -AnnotBorderStyle::AnnotBorderStyle(AnnotBorderType typeA, double widthA, - double *dashA, int dashLengthA, - double rA, double gA, double bA) { - type = typeA; - width = widthA; - dash = dashA; - dashLength = dashLengthA; - r = rA; - g = gA; - b = bA; -} - -AnnotBorderStyle::~AnnotBorderStyle() { - if (dash) { - gfree(dash); - } -} - -//------------------------------------------------------------------------ -// Annot -//------------------------------------------------------------------------ - -Annot::Annot(PDFDoc *docA, Dict *dict, Ref *refA) { - Object apObj, asObj, obj1, obj2, obj3; - AnnotBorderType borderType; - double borderWidth; - double *borderDash; - int borderDashLength; - double borderR, borderG, borderB; - double t; - int i; - - ok = gTrue; - doc = docA; - xref = doc->getXRef(); - ref = *refA; - type = NULL; - appearanceState = NULL; - appearBuf = NULL; - borderStyle = NULL; - - //----- parse the type - - if (dict->lookup("Subtype", &obj1)->isName()) { - type = new GString(obj1.getName()); - } - obj1.free(); - - //----- parse the rectangle - - if (dict->lookup("Rect", &obj1)->isArray() && - obj1.arrayGetLength() == 4) { - xMin = yMin = xMax = yMax = 0; - if (obj1.arrayGet(0, &obj2)->isNum()) { - xMin = obj2.getNum(); - } - obj2.free(); - if (obj1.arrayGet(1, &obj2)->isNum()) { - yMin = obj2.getNum(); - } - obj2.free(); - if (obj1.arrayGet(2, &obj2)->isNum()) { - xMax = obj2.getNum(); - } - obj2.free(); - if (obj1.arrayGet(3, &obj2)->isNum()) { - yMax = obj2.getNum(); - } - obj2.free(); - if (xMin > xMax) { - t = xMin; xMin = xMax; xMax = t; - } - if (yMin > yMax) { - t = yMin; yMin = yMax; yMax = t; - } - } else { - error(errSyntaxError, -1, "Bad bounding box for annotation"); - ok = gFalse; - } - obj1.free(); - - //----- parse the flags - - if (dict->lookup("F", &obj1)->isInt()) { - flags = obj1.getInt(); - } else { - flags = 0; - } - obj1.free(); - - //----- parse the border style - - borderType = annotBorderSolid; - borderWidth = 1; - borderDash = NULL; - borderDashLength = 0; - borderR = 0; - borderG = 0; - borderB = 1; - if (dict->lookup("BS", &obj1)->isDict()) { - if (obj1.dictLookup("S", &obj2)->isName()) { - if (obj2.isName("S")) { - borderType = annotBorderSolid; - } else if (obj2.isName("D")) { - borderType = annotBorderDashed; - } else if (obj2.isName("B")) { - borderType = annotBorderBeveled; - } else if (obj2.isName("I")) { - borderType = annotBorderInset; - } else if (obj2.isName("U")) { - borderType = annotBorderUnderlined; - } - } - obj2.free(); - if (obj1.dictLookup("W", &obj2)->isNum()) { - borderWidth = obj2.getNum(); - } - obj2.free(); - if (obj1.dictLookup("D", &obj2)->isArray()) { - borderDashLength = obj2.arrayGetLength(); - borderDash = (double *)gmallocn(borderDashLength, sizeof(double)); - for (i = 0; i < borderDashLength; ++i) { - if (obj2.arrayGet(i, &obj3)->isNum()) { - borderDash[i] = obj3.getNum(); - } else { - borderDash[i] = 1; - } - obj3.free(); - } - } - obj2.free(); - } else { - obj1.free(); - if (dict->lookup("Border", &obj1)->isArray()) { - if (obj1.arrayGetLength() >= 3) { - if (obj1.arrayGet(2, &obj2)->isNum()) { - borderWidth = obj2.getNum(); - } - obj2.free(); - if (obj1.arrayGetLength() >= 4) { - if (obj1.arrayGet(3, &obj2)->isArray()) { - borderType = annotBorderDashed; - borderDashLength = obj2.arrayGetLength(); - borderDash = (double *)gmallocn(borderDashLength, sizeof(double)); - for (i = 0; i < borderDashLength; ++i) { - if (obj2.arrayGet(i, &obj3)->isNum()) { - borderDash[i] = obj3.getNum(); - } else { - borderDash[i] = 1; - } - obj3.free(); - } - } else { - // Adobe draws no border at all if the last element is of - // the wrong type. - borderWidth = 0; - } - obj2.free(); - } - } - } - } - obj1.free(); - if (dict->lookup("C", &obj1)->isArray() && obj1.arrayGetLength() == 3) { - if (obj1.arrayGet(0, &obj2)->isNum()) { - borderR = obj2.getNum(); - } - obj1.free(); - if (obj1.arrayGet(1, &obj2)->isNum()) { - borderG = obj2.getNum(); - } - obj1.free(); - if (obj1.arrayGet(2, &obj2)->isNum()) { - borderB = obj2.getNum(); - } - obj1.free(); - } - obj1.free(); - borderStyle = new AnnotBorderStyle(borderType, borderWidth, - borderDash, borderDashLength, - borderR, borderG, borderB); - - //----- get the appearance state - - dict->lookup("AP", &apObj); - dict->lookup("AS", &asObj); - if (asObj.isName()) { - appearanceState = new GString(asObj.getName()); - } else if (apObj.isDict()) { - apObj.dictLookup("N", &obj1); - if (obj1.isDict() && obj1.dictGetLength() == 1) { - appearanceState = new GString(obj1.dictGetKey(0)); - } - obj1.free(); - } - if (!appearanceState) { - appearanceState = new GString("Off"); - } - asObj.free(); - - //----- get the annotation appearance - - if (apObj.isDict()) { - apObj.dictLookup("N", &obj1); - apObj.dictLookupNF("N", &obj2); - if (obj1.isDict()) { - if (obj1.dictLookupNF(appearanceState->getCString(), &obj3)->isRef()) { - obj3.copy(&appearance); - } - obj3.free(); - } else if (obj2.isRef()) { - obj2.copy(&appearance); - } - obj1.free(); - obj2.free(); - } - apObj.free(); - - //----- get the optional content entry - - dict->lookupNF("OC", &ocObj); -} - -Annot::~Annot() { - if (type) { - delete type; - } - if (appearanceState) { - delete appearanceState; - } - appearance.free(); - if (appearBuf) { - delete appearBuf; - } - if (borderStyle) { - delete borderStyle; - } - ocObj.free(); -} - -void Annot::generateFieldAppearance(Dict *field, Dict *annot, Dict *acroForm) { - Object mkObj, ftObj, appearDict, drObj, obj1, obj2, obj3; - Dict *mkDict; - MemStream *appearStream; - GfxFontDict *fontDict; - GBool hasCaption; - double w, dx, dy, r; - double *dash; - GString *caption, *da; - GString **text; - GBool *selection; - int rot, dashLength, ff, quadding, comb, nOptions, topIdx, i, j; - - // must be a Widget annotation - if (type->cmp("Widget")) { - return; - } - - appearBuf = new GString(); - - // get the appearance characteristics (MK) dictionary - if (annot->lookup("MK", &mkObj)->isDict()) { - mkDict = mkObj.getDict(); - } else { - mkDict = NULL; - } - - // draw the background - if (mkDict) { - if (mkDict->lookup("BG", &obj1)->isArray() && - obj1.arrayGetLength() > 0) { - setColor(obj1.getArray(), gTrue, 0); - appearBuf->appendf("0 0 {0:.2f} {1:.2f} re f\n", - xMax - xMin, yMax - yMin); - } - obj1.free(); - } - - // get the field type - fieldLookup(field, acroForm, "FT", &ftObj); - - // get the field flags (Ff) value - if (fieldLookup(field, acroForm, "Ff", &obj1)->isInt()) { - ff = obj1.getInt(); - } else { - ff = 0; - } - obj1.free(); - - // draw the border - if (mkDict) { - w = borderStyle->getWidth(); - if (w > 0) { - mkDict->lookup("BC", &obj1); - if (!(obj1.isArray() && obj1.arrayGetLength() > 0)) { - mkDict->lookup("BG", &obj1); - } - if (obj1.isArray() && obj1.arrayGetLength() > 0) { - dx = xMax - xMin; - dy = yMax - yMin; - - // radio buttons with no caption have a round border - hasCaption = mkDict->lookup("CA", &obj2)->isString(); - obj2.free(); - if (ftObj.isName("Btn") && (ff & fieldFlagRadio) && !hasCaption) { - r = 0.5 * (dx < dy ? dx : dy); - switch (borderStyle->getType()) { - case annotBorderDashed: - appearBuf->append("["); - borderStyle->getDash(&dash, &dashLength); - for (i = 0; i < dashLength; ++i) { - appearBuf->appendf(" {0:.2f}", dash[i]); - } - appearBuf->append("] 0 d\n"); - // fall through to the solid case - case annotBorderSolid: - case annotBorderUnderlined: - appearBuf->appendf("{0:.2f} w\n", w); - setColor(obj1.getArray(), gFalse, 0); - drawCircle(0.5 * dx, 0.5 * dy, r - 0.5 * w, gFalse); - break; - case annotBorderBeveled: - case annotBorderInset: - appearBuf->appendf("{0:.2f} w\n", 0.5 * w); - setColor(obj1.getArray(), gFalse, 0); - drawCircle(0.5 * dx, 0.5 * dy, r - 0.25 * w, gFalse); - setColor(obj1.getArray(), gFalse, - borderStyle->getType() == annotBorderBeveled ? 1 : -1); - drawCircleTopLeft(0.5 * dx, 0.5 * dy, r - 0.75 * w); - setColor(obj1.getArray(), gFalse, - borderStyle->getType() == annotBorderBeveled ? -1 : 1); - drawCircleBottomRight(0.5 * dx, 0.5 * dy, r - 0.75 * w); - break; - } - - } else { - switch (borderStyle->getType()) { - case annotBorderDashed: - appearBuf->append("["); - borderStyle->getDash(&dash, &dashLength); - for (i = 0; i < dashLength; ++i) { - appearBuf->appendf(" {0:.2f}", dash[i]); - } - appearBuf->append("] 0 d\n"); - // fall through to the solid case - case annotBorderSolid: - appearBuf->appendf("{0:.2f} w\n", w); - setColor(obj1.getArray(), gFalse, 0); - appearBuf->appendf("{0:.2f} {0:.2f} {1:.2f} {2:.2f} re s\n", - 0.5 * w, dx - w, dy - w); - break; - case annotBorderBeveled: - case annotBorderInset: - setColor(obj1.getArray(), gTrue, - borderStyle->getType() == annotBorderBeveled ? 1 : -1); - 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"); - setColor(obj1.getArray(), gTrue, - borderStyle->getType() == annotBorderBeveled ? -1 : 1); - 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 annotBorderUnderlined: - appearBuf->appendf("{0:.2f} w\n", w); - setColor(obj1.getArray(), gFalse, 0); - 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); - } - } - obj1.free(); - } - } - - // get the resource dictionary - fieldLookup(field, acroForm, "DR", &drObj); - - // build the font dictionary - if (drObj.isDict() && drObj.dictLookup("Font", &obj1)->isDict()) { - fontDict = new GfxFontDict(doc->getXRef(), NULL, obj1.getDict()); - } else { - fontDict = NULL; - } - obj1.free(); - - // get the default appearance string - if (fieldLookup(field, acroForm, "DA", &obj1)->isNull()) { - obj1.free(); - acroForm->lookup("DA", &obj1); - } - if (obj1.isString()) { - da = obj1.getString()->copy(); - } else { - da = NULL; - } - obj1.free(); - - // get the rotation value - rot = 0; - if (mkDict) { - if (mkDict->lookup("R", &obj1)->isInt()) { - rot = obj1.getInt(); - } - obj1.free(); - } - - // draw the field contents - if (ftObj.isName("Btn")) { - caption = NULL; - if (mkDict) { - if (mkDict->lookup("CA", &obj1)->isString()) { - caption = obj1.getString()->copy(); - } - obj1.free(); - } - // radio button - if (ff & fieldFlagRadio) { - //~ Acrobat doesn't draw a caption if there is no AP dict (?) - if (fieldLookup(field, acroForm, "V", &obj1) - ->isName(appearanceState->getCString())) { - if (caption) { - drawText(caption, da, fontDict, gFalse, 0, fieldQuadCenter, - gFalse, gTrue, rot); - } else { - if (mkDict) { - if (mkDict->lookup("BC", &obj2)->isArray() && - obj2.arrayGetLength() > 0) { - dx = xMax - xMin; - dy = yMax - yMin; - setColor(obj2.getArray(), gTrue, 0); - drawCircle(0.5 * dx, 0.5 * dy, 0.2 * (dx < dy ? dx : dy), - gTrue); - } - obj2.free(); - } - } - } - obj1.free(); - // pushbutton - } else if (ff & fieldFlagPushbutton) { - if (caption) { - drawText(caption, da, fontDict, gFalse, 0, fieldQuadCenter, - gFalse, gFalse, rot); - } - // checkbox - } else { - fieldLookup(field, acroForm, "V", &obj1); - if (obj1.isName() && !obj1.isName("Off")) { - if (!caption) { - caption = new GString("3"); // ZapfDingbats checkmark - } - drawText(caption, da, fontDict, gFalse, 0, fieldQuadCenter, - gFalse, gTrue, rot); - } - obj1.free(); - } - if (caption) { - delete caption; - } - } else if (ftObj.isName("Tx")) { - //~ value strings can be Unicode - if (!fieldLookup(field, acroForm, "V", &obj1)->isString()) { - obj1.free(); - fieldLookup(field, acroForm, "DV", &obj1); - } - if (obj1.isString()) { - if (fieldLookup(field, acroForm, "Q", &obj2)->isInt()) { - quadding = obj2.getInt(); - } else { - quadding = fieldQuadLeft; - } - obj2.free(); - comb = 0; - if (ff & fieldFlagComb) { - if (fieldLookup(field, acroForm, "MaxLen", &obj2)->isInt()) { - comb = obj2.getInt(); - } - obj2.free(); - } - drawText(obj1.getString(), da, fontDict, - ff & fieldFlagMultiline, comb, quadding, gTrue, gFalse, rot); - } - obj1.free(); - } else if (ftObj.isName("Ch")) { - //~ value/option strings can be Unicode - if (fieldLookup(field, acroForm, "Q", &obj1)->isInt()) { - quadding = obj1.getInt(); - } else { - quadding = fieldQuadLeft; - } - obj1.free(); - // combo box - if (ff & fieldFlagCombo) { - if (fieldLookup(field, acroForm, "V", &obj1)->isString()) { - drawText(obj1.getString(), da, fontDict, - gFalse, 0, quadding, gTrue, gFalse, rot); - //~ Acrobat draws a popup icon on the right side - } - obj1.free(); - // list box - } else { - if (field->lookup("Opt", &obj1)->isArray()) { - nOptions = obj1.arrayGetLength(); - // get the option text - text = (GString **)gmallocn(nOptions, sizeof(GString *)); - for (i = 0; i < nOptions; ++i) { - text[i] = NULL; - obj1.arrayGet(i, &obj2); - if (obj2.isString()) { - text[i] = obj2.getString()->copy(); - } else if (obj2.isArray() && obj2.arrayGetLength() == 2) { - if (obj2.arrayGet(1, &obj3)->isString()) { - text[i] = obj3.getString()->copy(); - } - obj3.free(); - } - obj2.free(); - if (!text[i]) { - text[i] = new GString(); - } - } - // get the selected option(s) - selection = (GBool *)gmallocn(nOptions, sizeof(GBool)); - //~ need to use the I field in addition to the V field - fieldLookup(field, acroForm, "V", &obj2); - for (i = 0; i < nOptions; ++i) { - selection[i] = gFalse; - if (obj2.isString()) { - if (!obj2.getString()->cmp(text[i])) { - selection[i] = gTrue; - } - } else if (obj2.isArray()) { - for (j = 0; j < obj2.arrayGetLength(); ++j) { - if (obj2.arrayGet(j, &obj3)->isString() && - !obj3.getString()->cmp(text[i])) { - selection[i] = gTrue; - } - obj3.free(); - } - } - } - obj2.free(); - // get the top index - if (field->lookup("TI", &obj2)->isInt()) { - topIdx = obj2.getInt(); - } else { - topIdx = 0; - } - obj2.free(); - // draw the text - drawListBox(text, selection, nOptions, topIdx, da, fontDict, quadding); - for (i = 0; i < nOptions; ++i) { - delete text[i]; - } - gfree(text); - gfree(selection); - } - obj1.free(); - } - } else if (ftObj.isName("Sig")) { - //~unimp - } else { - error(errSyntaxError, -1, "Unknown field type"); - } - - if (da) { - delete da; - } - - // build the appearance stream dictionary - appearDict.initDict(doc->getXRef()); - appearDict.dictAdd(copyString("Length"), - obj1.initInt(appearBuf->getLength())); - appearDict.dictAdd(copyString("Subtype"), obj1.initName("Form")); - obj1.initArray(doc->getXRef()); - obj1.arrayAdd(obj2.initReal(0)); - obj1.arrayAdd(obj2.initReal(0)); - obj1.arrayAdd(obj2.initReal(xMax - xMin)); - obj1.arrayAdd(obj2.initReal(yMax - yMin)); - appearDict.dictAdd(copyString("BBox"), &obj1); - - // set the resource dictionary - if (drObj.isDict()) { - appearDict.dictAdd(copyString("Resources"), drObj.copy(&obj1)); - } - drObj.free(); - - // build the appearance stream - appearStream = new MemStream(appearBuf->getCString(), 0, - appearBuf->getLength(), &appearDict); - appearance.free(); - appearance.initStream(appearStream); - - if (fontDict) { - delete fontDict; - } - ftObj.free(); - mkObj.free(); -} - -// Set the current fill or stroke color, based on (which should -// have 1, 3, or 4 elements). If is +1, color is brightened; -// if is -1, color is darkened; otherwise color is not -// modified. -void Annot::setColor(Array *a, GBool fill, int adjust) { - Object obj1; - double color[4]; - int nComps, i; - - nComps = a->getLength(); - if (nComps > 4) { - nComps = 4; - } - for (i = 0; i < nComps && i < 4; ++i) { - if (a->get(i, &obj1)->isNum()) { - color[i] = obj1.getNum(); - } else { - color[i] = 0; - } - obj1.free(); - } - if (nComps == 4) { - adjust = -adjust; - } - if (adjust > 0) { - for (i = 0; i < nComps; ++i) { - color[i] = 0.5 * color[i] + 0.5; - } - } else if (adjust < 0) { - for (i = 0; i < nComps; ++i) { - color[i] = 0.5 * color[i]; - } - } - if (nComps == 4) { - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} {4:c}\n", - color[0], color[1], color[2], color[3], - fill ? 'k' : 'K'); - } else if (nComps == 3) { - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:s}\n", - color[0], color[1], color[2], - fill ? "rg" : "RG"); - } else { - appearBuf->appendf("{0:.2f} {1:c}\n", - color[0], - fill ? 'g' : 'G'); - } -} - -// Draw the variable text or caption for a field. -void Annot::drawText(GString *text, GString *da, GfxFontDict *fontDict, - GBool multiline, int comb, int quadding, - GBool txField, GBool forceZapfDingbats, int rot) { - GString *text2; - GList *daToks; - GString *tok; - GfxFont *font; - double dx, dy; - double fontSize, fontSize2, border, x, xPrev, y, w, w2, wMax; - int tfPos, tmPos, i, j, k, c; - - //~ 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) - - // check for a Unicode string - //~ this currently drops all non-Latin1 characters - if (text->getLength() >= 2 && - text->getChar(0) == '\xfe' && text->getChar(1) == '\xff') { - text2 = new GString(); - for (i = 2; i+1 < text->getLength(); i += 2) { - c = ((text->getChar(i) & 0xff) << 8) + (text->getChar(i+1) & 0xff); - if (c <= 0xff) { - text2->append((char)c); - } else { - text2->append('?'); - } - } - } else { - text2 = text; - } - - // parse the default appearance string - tfPos = tmPos = -1; - if (da) { - daToks = new GList(); - 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 GString(da, i, j - i)); - i = j; - } - } - for (i = 2; i < daToks->getLength(); ++i) { - if (i >= 2 && !((GString *)daToks->get(i))->cmp("Tf")) { - tfPos = i - 2; - } else if (i >= 6 && !((GString *)daToks->get(i))->cmp("Tm")) { - tmPos = i - 6; - } - } - } else { - daToks = NULL; - } - - // force ZapfDingbats - //~ this should create the font if needed (?) - if (forceZapfDingbats) { - if (tfPos >= 0) { - tok = (GString *)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 = (GString *)daToks->get(tfPos); - if (tok->getLength() >= 1 && tok->getChar(0) == '/') { - if (!fontDict || !(font = fontDict->lookup(tok->getCString() + 1))) { - error(errSyntaxError, -1, "Unknown font in field's DA string"); - } - } else { - error(errSyntaxError, -1, - "Invalid font name in 'Tf' operator in field's DA string"); - } - tok = (GString *)daToks->get(tfPos + 1); - fontSize = atof(tok->getCString()); - } else { - error(errSyntaxError, -1, "Missing 'Tf' operator in field's DA string"); - } - - // get the border width - border = borderStyle->getWidth(); - - // setup - if (txField) { - appearBuf->append("/Tx BMC\n"); - } - appearBuf->append("q\n"); - if (rot == 90) { - appearBuf->appendf("0 1 -1 0 {0:.2f} 0 cm\n", xMax - xMin); - dx = yMax - yMin; - dy = xMax - xMin; - } else if (rot == 180) { - appearBuf->appendf("-1 0 0 -1 {0:.2f} {1:.2f} cm\n", - xMax - xMin, yMax - yMin); - dx = xMax - yMax; - dy = yMax - yMin; - } else if (rot == 270) { - appearBuf->appendf("0 -1 1 0 0 {0:.2f} cm\n", yMax - yMin); - dx = yMax - yMin; - dy = xMax - xMin; - } else { // assume rot == 0 - dx = xMax - xMin; - dy = yMax - yMin; - } - appearBuf->append("BT\n"); - - // multi-line text - if (multiline) { - // note: the comb flag is ignored in multiline mode - - wMax = dx - 2 * border - 4; - - // compute font autosize - if (fontSize == 0) { - for (fontSize = 20; fontSize > 1; --fontSize) { - y = dy - 3; - w2 = 0; - i = 0; - while (i < text2->getLength()) { - getNextLine(text2, i, font, fontSize, wMax, &j, &w, &k); - if (w > w2) { - w2 = w; - } - i = k; - y -= fontSize; - } - // approximate the descender for the last line - if (y >= 0.33 * fontSize) { - break; - } - } - if (tfPos >= 0) { - tok = (GString *)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 = dy - 3; - - // set the font matrix - if (tmPos >= 0) { - tok = (GString *)daToks->get(tmPos + 4); - tok->clear(); - tok->append('0'); - tok = (GString *)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((GString *)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 < text2->getLength()) { - - getNextLine(text2, i, font, fontSize, wMax, &j, &w, &k); - - // compute text start position - switch (quadding) { - case fieldQuadLeft: - default: - x = border + 2; - break; - case fieldQuadCenter: - x = (dx - w) / 2; - break; - case fieldQuadRight: - x = dx - border - 2 - w; - break; - } - - // draw the line - appearBuf->appendf("{0:.2f} {1:.2f} Td\n", x - xPrev, -fontSize); - appearBuf->append('('); - for (; i < j; ++i) { - c = text2->getChar(i) & 0xff; - if (c == '(' || c == ')' || c == '\\') { - appearBuf->append('\\'); - appearBuf->append(c); - } else if (c < 0x20 || c >= 0x80) { - appearBuf->appendf("\\{0:03o}", c); - } else { - appearBuf->append(c); - } - } - appearBuf->append(") Tj\n"); - - // next line - i = k; - xPrev = x; - } - - // single-line text - } else { - //~ replace newlines with spaces? - what does Acrobat do? - - // comb formatting - if (comb > 0) { - - // compute comb spacing - w = (dx - 2 * border) / comb; - - // compute font autosize - if (fontSize == 0) { - fontSize = dy - 2 * border; - if (w < fontSize) { - fontSize = w; - } - fontSize = floor(fontSize); - if (tfPos >= 0) { - tok = (GString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - - // compute text start position - switch (quadding) { - case fieldQuadLeft: - default: - x = border + 2; - break; - case fieldQuadCenter: - x = border + 2 + 0.5 * (comb - text2->getLength()) * w; - break; - case fieldQuadRight: - x = border + 2 + (comb - text2->getLength()) * w; - break; - } - y = 0.5 * dy - 0.4 * fontSize; - - // set the font matrix - if (tmPos >= 0) { - tok = (GString *)daToks->get(tmPos + 4); - tok->clear(); - tok->appendf("{0:.2f}", x); - tok = (GString *)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((GString *)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 - //~ this should center (instead of left-justify) each character within - //~ its comb cell - for (i = 0; i < text2->getLength(); ++i) { - if (i > 0) { - appearBuf->appendf("{0:.2f} 0 Td\n", w); - } - appearBuf->append('('); - c = text2->getChar(i) & 0xff; - if (c == '(' || c == ')' || c == '\\') { - appearBuf->append('\\'); - appearBuf->append(c); - } else if (c < 0x20 || c >= 0x80) { - appearBuf->appendf("{0:.2f} 0 Td\n", w); - } else { - appearBuf->append(c); - } - appearBuf->append(") Tj\n"); - } - - // regular (non-comb) formatting - } else { - - // compute string width - if (font && !font->isCIDFont()) { - w = 0; - for (i = 0; i < text2->getLength(); ++i) { - w += ((Gfx8BitFont *)font)->getWidth(text2->getChar(i)); - } - } else { - // otherwise, make a crude estimate - w = text2->getLength() * 0.5; - } - - // compute font autosize - if (fontSize == 0) { - fontSize = dy - 2 * border; - fontSize2 = (dx - 4 - 2 * border) / w; - if (fontSize2 < fontSize) { - fontSize = fontSize2; - } - fontSize = floor(fontSize); - if (tfPos >= 0) { - tok = (GString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - - // compute text start position - w *= fontSize; - switch (quadding) { - case fieldQuadLeft: - default: - x = border + 2; - break; - case fieldQuadCenter: - x = (dx - w) / 2; - break; - case fieldQuadRight: - x = dx - border - 2 - w; - break; - } - y = 0.5 * dy - 0.4 * fontSize; - - // set the font matrix - if (tmPos >= 0) { - tok = (GString *)daToks->get(tmPos + 4); - tok->clear(); - tok->appendf("{0:.2f}", x); - tok = (GString *)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((GString *)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 - appearBuf->append('('); - for (i = 0; i < text2->getLength(); ++i) { - c = text2->getChar(i) & 0xff; - if (c == '(' || c == ')' || c == '\\') { - appearBuf->append('\\'); - appearBuf->append(c); - } else if (c < 0x20 || c >= 0x80) { - appearBuf->appendf("\\{0:03o}", c); - } else { - appearBuf->append(c); - } - } - appearBuf->append(") Tj\n"); - } - } - - // cleanup - appearBuf->append("ET\n"); - appearBuf->append("Q\n"); - if (txField) { - appearBuf->append("EMC\n"); - } - - if (daToks) { - deleteGList(daToks, GString); - } - if (text2 != text) { - delete text2; - } -} - -// Draw the variable text or caption for a field. -void Annot::drawListBox(GString **text, GBool *selection, - int nOptions, int topIdx, - GString *da, GfxFontDict *fontDict, GBool quadding) { - GList *daToks; - GString *tok; - GfxFont *font; - double fontSize, fontSize2, border, x, y, w, wMax; - int tfPos, tmPos, i, j, c; - - //~ 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 GList(); - 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 GString(da, i, j - i)); - i = j; - } - } - for (i = 2; i < daToks->getLength(); ++i) { - if (i >= 2 && !((GString *)daToks->get(i))->cmp("Tf")) { - tfPos = i - 2; - } else if (i >= 6 && !((GString *)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 = (GString *)daToks->get(tfPos); - if (tok->getLength() >= 1 && tok->getChar(0) == '/') { - if (!fontDict || !(font = fontDict->lookup(tok->getCString() + 1))) { - error(errSyntaxError, -1, "Unknown font in field's DA string"); - } - } else { - error(errSyntaxError, -1, - "Invalid font name in 'Tf' operator in field's DA string"); - } - tok = (GString *)daToks->get(tfPos + 1); - fontSize = atof(tok->getCString()); - } else { - error(errSyntaxError, -1, "Missing 'Tf' operator in field's DA string"); - } - - // get the border width - border = borderStyle->getWidth(); - - // compute font autosize - if (fontSize == 0) { - wMax = 0; - for (i = 0; i < nOptions; ++i) { - if (font && !font->isCIDFont()) { - w = 0; - for (j = 0; j < text[i]->getLength(); ++j) { - w += ((Gfx8BitFont *)font)->getWidth(text[i]->getChar(j)); - } - } else { - // otherwise, make a crude estimate - w = text[i]->getLength() * 0.5; - } - if (w > wMax) { - wMax = w; - } - } - fontSize = yMax - yMin - 2 * border; - fontSize2 = (xMax - xMin - 4 - 2 * border) / wMax; - if (fontSize2 < fontSize) { - fontSize = fontSize2; - } - fontSize = floor(fontSize); - if (tfPos >= 0) { - tok = (GString *)daToks->get(tfPos + 1); - tok->clear(); - tok->appendf("{0:.2f}", fontSize); - } - } - - // draw the text - y = yMax - yMin - 1.1 * fontSize; - for (i = topIdx; i < nOptions; ++i) { - - // setup - appearBuf->append("q\n"); - - // draw the background if selected - if (selection[i]) { - appearBuf->append("0 g f\n"); - appearBuf->appendf("{0:.2f} {1:.2f} {2:.2f} {3:.2f} re f\n", - border, - y - 0.2 * fontSize, - xMax - xMin - 2 * border, - 1.1 * fontSize); - } - - // setup - appearBuf->append("BT\n"); - - // compute string width - if (font && !font->isCIDFont()) { - w = 0; - for (j = 0; j < text[i]->getLength(); ++j) { - w += ((Gfx8BitFont *)font)->getWidth(text[i]->getChar(j)); - } - } else { - // otherwise, make a crude estimate - w = text[i]->getLength() * 0.5; - } - - // compute text start position - w *= fontSize; - switch (quadding) { - case fieldQuadLeft: - default: - x = border + 2; - break; - case fieldQuadCenter: - x = (xMax - xMin - w) / 2; - break; - case fieldQuadRight: - x = xMax - xMin - border - 2 - w; - break; - } - - // set the font matrix - if (tmPos >= 0) { - tok = (GString *)daToks->get(tmPos + 4); - tok->clear(); - tok->appendf("{0:.2f}", x); - tok = (GString *)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((GString *)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 (selection[i]) { - appearBuf->append("1 g\n"); - } - - // write the text string - appearBuf->append('('); - for (j = 0; j < text[i]->getLength(); ++j) { - c = text[i]->getChar(j) & 0xff; - if (c == '(' || c == ')' || c == '\\') { - appearBuf->append('\\'); - appearBuf->append(c); - } else if (c < 0x20 || c >= 0x80) { - appearBuf->appendf("\\{0:03o}", c); - } else { - appearBuf->append(c); - } - } - appearBuf->append(") Tj\n"); - - // cleanup - appearBuf->append("ET\n"); - appearBuf->append("Q\n"); - - // next line - y -= 1.1 * fontSize; - } - - if (daToks) { - deleteGList(daToks, GString); - } -} - -// Figure out how much text will fit on the next line. Returns: -// *end = one past the last character to be included -// *width = width of the characters start .. end-1 -// *next = index of first character on the following line -void Annot::getNextLine(GString *text, int start, - GfxFont *font, double fontSize, double wMax, - int *end, double *width, int *next) { - double w, dw; - int j, k, c; - - // figure out how much text will fit on the line - //~ what does Adobe do with tabs? - w = 0; - for (j = start; j < text->getLength() && w <= wMax; ++j) { - c = text->getChar(j) & 0xff; - if (c == 0x0a || c == 0x0d) { - break; - } - if (font && !font->isCIDFont()) { - dw = ((Gfx8BitFont *)font)->getWidth(c) * fontSize; - } else { - // otherwise, make a crude estimate - dw = 0.5 * fontSize; - } - w += dw; - } - if (w > wMax) { - for (k = j; k > start && text->getChar(k-1) != ' '; --k) ; - for (; k > start && text->getChar(k-1) == ' '; --k) ; - if (k > start) { - j = k; - } - if (j == start) { - // handle the pathological case where the first character is - // too wide to fit on the line all by itself - j = start + 1; - } - } - *end = j; - - // compute the width - w = 0; - for (k = start; k < j; ++k) { - if (font && !font->isCIDFont()) { - dw = ((Gfx8BitFont *)font)->getWidth(text->getChar(k)) * fontSize; - } else { - // otherwise, make a crude estimate - dw = 0.5 * fontSize; - } - w += dw; - } - *width = w; - - // next line - while (j < text->getLength() && text->getChar(j) == ' ') { - ++j; - } - if (j < text->getLength() && text->getChar(j) == 0x0d) { - ++j; - } - if (j < text->getLength() && text->getChar(j) == 0x0a) { - ++j; - } - *next = j; -} - -// Draw an (approximate) circle of radius centered at (, ). -// If 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 -// centered at (, ). -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 -// centered at (, ). -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"); -} - -// Look up an inheritable field dictionary entry. -Object *Annot::fieldLookup(Dict *field, Dict *acroForm, - char *key, Object *obj) { - Dict *dict; - Object parent; - - dict = field; - if (!dict->lookup(key, obj)->isNull()) { - return obj; - } - obj->free(); - if (dict->lookup("Parent", &parent)->isDict()) { - fieldLookup(parent.getDict(), acroForm, key, obj); - } else if (acroForm) { - // some fields don't specify a parent, so we check the AcroForm - // dictionary just in case - fieldLookup(acroForm, NULL, key, obj); - } else { - obj->initNull(); - } - parent.free(); - return obj; -} - -void Annot::draw(Gfx *gfx, GBool printing) { - Object obj; - GBool oc, isLink; - - // check the flags - if ((flags & annotFlagHidden) || - (printing && !(flags & annotFlagPrint)) || - (!printing && (flags & annotFlagNoView))) { - return; - } - - // check the optional content entry - if (doc->getOptionalContent()->evalOCObject(&ocObj, &oc) && !oc) { - return; - } - - // draw the appearance stream - isLink = type && !type->cmp("Link"); - appearance.fetch(doc->getXRef(), &obj); - gfx->drawAnnot(&obj, isLink ? borderStyle : (AnnotBorderStyle *)NULL, - xMin, yMin, xMax, yMax); - obj.free(); -} - -//------------------------------------------------------------------------ -// Annots -//------------------------------------------------------------------------ - -Annots::Annots(PDFDoc *docA, Object *annotsObj) { - Annot *annot; - Object obj1; - Ref ref; - int size; - int i; - - doc = docA; - annots = NULL; - size = 0; - nAnnots = 0; - - if (annotsObj->isArray()) { - for (i = 0; i < annotsObj->arrayGetLength(); ++i) { - if (annotsObj->arrayGetNF(i, &obj1)->isRef()) { - ref = obj1.getRef(); - obj1.free(); - annotsObj->arrayGet(i, &obj1); - } else { - ref.num = ref.gen = -1; - } - if (obj1.isDict()) { - annot = new Annot(doc, obj1.getDict(), &ref); - if (annot->isOk()) { - if (nAnnots >= size) { - size += 16; - annots = (Annot **)greallocn(annots, size, sizeof(Annot *)); - } - annots[nAnnots++] = annot; - } else { - delete annot; - } - } - obj1.free(); - } - } -} - -Annots::~Annots() { - int i; - - for (i = 0; i < nAnnots; ++i) { - delete annots[i]; - } - gfree(annots); -} - -void Annots::generateAppearances() { - Dict *acroForm; - Object obj1, obj2; - Ref ref; - int i; - - acroForm = doc->getCatalog()->getAcroForm()->isDict() ? - doc->getCatalog()->getAcroForm()->getDict() : NULL; - if (acroForm->lookup("Fields", &obj1)->isArray()) { - for (i = 0; i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGetNF(i, &obj2)->isRef()) { - ref = obj2.getRef(); - obj2.free(); - obj1.arrayGet(i, &obj2); - } else { - ref.num = ref.gen = -1; - } - if (obj2.isDict()) { - scanFieldAppearances(obj2.getDict(), &ref, NULL, acroForm); - } - obj2.free(); - } - } - obj1.free(); -} - -void Annots::scanFieldAppearances(Dict *node, Ref *ref, Dict *parent, - Dict *acroForm) { - Annot *annot; - Object obj1, obj2; - Ref ref2; - int i; - - // non-terminal node: scan the children - if (node->lookup("Kids", &obj1)->isArray()) { - for (i = 0; i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGetNF(i, &obj2)->isRef()) { - ref2 = obj2.getRef(); - obj2.free(); - obj1.arrayGet(i, &obj2); - } else { - ref2.num = ref2.gen = -1; - } - if (obj2.isDict()) { - scanFieldAppearances(obj2.getDict(), &ref2, node, acroForm); - } - obj2.free(); - } - obj1.free(); - return; - } - obj1.free(); - - // terminal node: this is either a combined annot/field dict, or an - // annot dict whose parent is a field - if ((annot = findAnnot(ref))) { - node->lookupNF("Parent", &obj1); - if (!parent || !obj1.isNull()) { - annot->generateFieldAppearance(node, node, acroForm); - } else { - annot->generateFieldAppearance(parent, node, acroForm); - } - obj1.free(); - } -} - -Annot *Annots::findAnnot(Ref *ref) { - int i; - - for (i = 0; i < nAnnots; ++i) { - if (annots[i]->match(ref)) { - return annots[i]; - } - } - return NULL; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Annot.h b/thirdparty/xpdf/3.02/src/xpdf/Annot.h deleted file mode 100644 index 8f622c44..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Annot.h +++ /dev/null @@ -1,148 +0,0 @@ -//======================================================================== -// -// Annot.h -// -// Copyright 2000-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef ANNOT_H -#define ANNOT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -class XRef; -class Catalog; -class Gfx; -class GfxFontDict; -class PDFDoc; - -//------------------------------------------------------------------------ -// AnnotBorderStyle -//------------------------------------------------------------------------ - -enum AnnotBorderType { - annotBorderSolid, - annotBorderDashed, - annotBorderBeveled, - annotBorderInset, - annotBorderUnderlined -}; - -class AnnotBorderStyle { -public: - - AnnotBorderStyle(AnnotBorderType typeA, double widthA, - double *dashA, int dashLengthA, - double rA, double gA, double bA); - ~AnnotBorderStyle(); - - AnnotBorderType getType() { return type; } - double getWidth() { return width; } - void getDash(double **dashA, int *dashLengthA) - { *dashA = dash; *dashLengthA = dashLength; } - void getColor(double *rA, double *gA, double *bA) - { *rA = r; *gA = g; *bA = b; } - -private: - - AnnotBorderType type; - double width; - double *dash; - int dashLength; - double r, g, b; -}; - -//------------------------------------------------------------------------ -// Annot -//------------------------------------------------------------------------ - -class Annot { -public: - - Annot(PDFDoc *docA, Dict *dict, Ref *refA); - ~Annot(); - GBool isOk() { return ok; } - - void draw(Gfx *gfx, GBool printing); - - // Get appearance object. - Object *getAppearance(Object *obj) { return appearance.fetch(xref, obj); } - - AnnotBorderStyle *getBorderStyle() { return borderStyle; } - - GBool match(Ref *refA) - { return ref.num == refA->num && ref.gen == refA->gen; } - - void generateFieldAppearance(Dict *field, Dict *annot, Dict *acroForm); - -private: - - void setColor(Array *a, GBool fill, int adjust); - void drawText(GString *text, GString *da, GfxFontDict *fontDict, - GBool multiline, int comb, int quadding, - GBool txField, GBool forceZapfDingbats, int rot); - void drawListBox(GString **text, GBool *selection, - int nOptions, int topIdx, - GString *da, GfxFontDict *fontDict, GBool quadding); - void getNextLine(GString *text, int start, - GfxFont *font, double fontSize, double wMax, - int *end, double *width, int *next); - 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); - Object *fieldLookup(Dict *field, Dict *acroForm, - char *key, Object *obj); - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - Ref ref; // object ref identifying this annotation - GString *type; // annotation type - GString *appearanceState; // appearance state name - Object appearance; // a reference to the Form XObject stream - // for the normal appearance - GString *appearBuf; - double xMin, yMin, // annotation rectangle - xMax, yMax; - Guint flags; - AnnotBorderStyle *borderStyle; - Object ocObj; // optional content entry - GBool ok; -}; - -//------------------------------------------------------------------------ -// Annots -//------------------------------------------------------------------------ - -class Annots { -public: - - // Build a list of Annot objects. - Annots(PDFDoc *docA, Object *annotsObj); - - ~Annots(); - - // Iterate through list of annotations. - int getNumAnnots() { return nAnnots; } - Annot *getAnnot(int i) { return annots[i]; } - - // (Re)generate the appearance streams for all annotations belonging - // to a form field. - void generateAppearances(); - -private: - - void scanFieldAppearances(Dict *node, Ref *ref, Dict *parent, - Dict *acroForm); - Annot *findAnnot(Ref *ref); - - PDFDoc *doc; - Annot **annots; - int nAnnots; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Array.cc b/thirdparty/xpdf/3.02/src/xpdf/Array.cc deleted file mode 100644 index 10ded148..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Array.cc +++ /dev/null @@ -1,73 +0,0 @@ -//======================================================================== -// -// Array.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "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); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Array.h b/thirdparty/xpdf/3.02/src/xpdf/Array.h deleted file mode 100644 index 20ae05f2..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Array.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================== -// -// Array.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef ARRAY_H -#define ARRAY_H - -#include - -#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); - -private: - - XRef *xref; // the xref table for this PDF file - Object *elems; // array of elements - int size; // size of array - int length; // number of elements in array - int ref; // reference count -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.cc b/thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.cc deleted file mode 100644 index ce989571..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.cc +++ /dev/null @@ -1,65 +0,0 @@ -//======================================================================== -// -// BuiltinFont.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "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/thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.h b/thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.h deleted file mode 100644 index 903ed19e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/BuiltinFont.h +++ /dev/null @@ -1,57 +0,0 @@ -//======================================================================== -// -// BuiltinFont.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef BUILTINFONT_H -#define BUILTINFONT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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/thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.cc b/thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.cc deleted file mode 100644 index 9c362389..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.cc +++ /dev/null @@ -1,4284 +0,0 @@ -//======================================================================== -// -// BuiltinFontTables.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#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/thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.h b/thirdparty/xpdf/3.02/src/xpdf/BuiltinFontTables.h deleted file mode 100644 index eb45549e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/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/thirdparty/xpdf/3.02/src/xpdf/CMap.cc b/thirdparty/xpdf/3.02/src/xpdf/CMap.cc deleted file mode 100644 index ac992566..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CMap.cc +++ /dev/null @@ -1,493 +0,0 @@ -//======================================================================== -// -// CMap.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include "gmem.h" -#include "gfile.h" -#include "GString.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PSTokenizer.h" -#include "Object.h" -#include "Stream.h" -#include "CMap.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, GString *collectionA, Object *obj) { - CMap *cMap; - GString *cMapNameA; - - if (obj->isName()) { - cMapNameA = new GString(obj->getName()); - if (!(cMap = globalParams->getCMap(collectionA, cMapNameA))) { - error(errSyntaxError, -1, - "Unknown CMap '{0:t}' for character collection '{1:t}'", - cMapNameA, collectionA); - } - delete cMapNameA; - } else if (obj->isStream()) { - if (!(cMap = CMap::parse(NULL, collectionA, obj->getStream()))) { - error(errSyntaxError, -1, "Invalid CMap in Type 0 font"); - } - } else { - error(errSyntaxError, -1, "Invalid Encoding in Type 0 font"); - return NULL; - } - return cMap; -} - -CMap *CMap::parse(CMapCache *cache, GString *collectionA, - GString *cMapNameA) { - FILE *f; - CMap *cMap; - - 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(errSyntaxError, -1, - "Couldn't find '{0:t}' CMap file for '{1:t}' collection", - cMapNameA, collectionA); - return NULL; - } - - cMap = new CMap(collectionA->copy(), cMapNameA->copy()); - cMap->parse2(cache, &getCharFromFile, f); - - fclose(f); - - return cMap; -} - -CMap *CMap::parse(CMapCache *cache, GString *collectionA, Stream *str) { - Object obj1; - CMap *cMap; - - cMap = new CMap(collectionA->copy(), NULL); - - if (!str->getDict()->lookup("UseCMap", &obj1)->isNull()) { - cMap->useCMap(cache, &obj1); - } - obj1.free(); - - str->reset(); - cMap->parse2(cache, &getCharFromStream, str); - str->close(); - return cMap; -} - -void CMap::parse2(CMapCache *cache, int (*getCharFunc)(void *), void *data) { - PSTokenizer *pst; - char tok1[256], tok2[256], tok3[256]; - int n1, n2, n3; - Guint start, end, code; - - 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] == '/') { - useCMap(cache, tok1 + 1); - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else if (!strcmp(tok1, "/WMode")) { - 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(errSyntaxError, -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; - addCodeSpace(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(errSyntaxError, -1, "Illegal entry in cidchar block in CMap"); - break; - } - if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && - n1 >= 4 && (n1 & 1) == 0)) { - error(errSyntaxError, -1, "Illegal entry in cidchar block in CMap"); - continue; - } - tok1[n1 - 1] = '\0'; - if (sscanf(tok1 + 1, "%x", &code) != 1) { - error(errSyntaxError, -1, "Illegal entry in cidchar block in CMap"); - continue; - } - n1 = (n1 - 2) / 2; - 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(errSyntaxError, -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; - addCIDs(start, end, n1, (CID)atoi(tok3)); - } - } - pst->getToken(tok1, sizeof(tok1), &n1); - } else { - strcpy(tok1, tok2); - } - } - delete pst; -} - -CMap::CMap(GString *collectionA, GString *cMapNameA) { - int i; - - collection = collectionA; - cMapName = cMapNameA; - isIdent = gFalse; - 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(GString *collectionA, GString *cMapNameA, int wModeA) { - collection = collectionA; - cMapName = cMapNameA; - isIdent = gTrue; - wMode = wModeA; - vector = NULL; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -void CMap::useCMap(CMapCache *cache, char *useName) { - GString *useNameStr; - CMap *subCMap; - - useNameStr = new GString(useName); - // if cache is non-NULL, we already have a lock, and we can use - // CMapCache::getCMap() directly; otherwise, we need to use - // GlobalParams::getCMap() in order to acqure the lock need to use - // GlobalParams::getCMap - if (cache) { - subCMap = cache->getCMap(collection, useNameStr); - } else { - subCMap = globalParams->getCMap(collection, useNameStr); - } - delete useNameStr; - if (!subCMap) { - return; - } - isIdent = subCMap->isIdent; - if (subCMap->vector) { - copyVector(vector, subCMap->vector); - } - subCMap->decRefCnt(); -} - -void CMap::useCMap(CMapCache *cache, Object *obj) { - CMap *subCMap; - - subCMap = CMap::parse(cache, collection, obj); - if (!subCMap) { - return; - } - isIdent = subCMap->isIdent; - if (subCMap->vector) { - 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(errSyntaxError, -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(errSyntaxError, -1, - "Invalid CID ({0:x} - {1:x} [{2:d} bytes]) in CMap", - start, end, nBytes); - return; - } - vec = vec[byte].vector; - } - cid = firstCID; - for (byte = (int)(start & 0xff); byte <= (int)(end & 0xff); ++byte) { - if (vec[byte].isVector) { - error(errSyntaxError, -1, - "Invalid CID ({0:x} - {1:x} [{2:d} bytes]) in CMap", - start, end, nBytes); - } else { - vec[byte].cid = cid; - } - ++cid; - } -} - -CMap::~CMap() { - delete collection; - if (cMapName) { - 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(GString *collectionA, GString *cMapNameA) { - return !collection->cmp(collectionA) && !cMapName->cmp(cMapNameA); -} - -CID CMap::getCID(char *s, int len, CharCode *c, int *nUsed) { - CMapVectorEntry *vec; - CharCode cc; - int n, i; - - vec = vector; - cc = 0; - n = 0; - while (vec && n < len) { - i = s[n++] & 0xff; - cc = (cc << 8) | i; - if (!vec[i].isVector) { - *c = cc; - *nUsed = n; - return vec[i].cid; - } - vec = vec[i].vector; - } - if (isIdent && len >= 2) { - // identity CMap - *nUsed = 2; - *c = cc = ((s[0] & 0xff) << 8) + (s[1] & 0xff); - return cc; - } - *nUsed = 1; - *c = s[0] & 0xff; - return 0; -} - -//------------------------------------------------------------------------ - -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(GString *collection, GString *cMapName) { - 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))) { - 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/thirdparty/xpdf/3.02/src/xpdf/CMap.h b/thirdparty/xpdf/3.02/src/xpdf/CMap.h deleted file mode 100644 index 1d58a196..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CMap.h +++ /dev/null @@ -1,116 +0,0 @@ -//======================================================================== -// -// CMap.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CMAP_H -#define CMAP_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "GMutex.h" -#endif - -class GString; -class Object; -class Stream; -struct CMapVectorEntry; -class CMapCache; - -//------------------------------------------------------------------------ - -class CMap { -public: - - // Parse a CMap from , which can be a name or a stream. Sets - // the initial reference count to 1. Returns NULL on failure. - static CMap *parse(CMapCache *cache, GString *collectionA, Object *obj); - - // Create the CMap specified by and . Sets - // the initial reference count to 1. Returns NULL on failure. - static CMap *parse(CMapCache *cache, GString *collectionA, - GString *cMapNameA); - - // Parse a CMap from . Sets the initial reference count to 1. - // Returns NULL on failure. - static CMap *parse(CMapCache *cache, GString *collectionA, Stream *str); - - ~CMap(); - - void incRefCnt(); - void decRefCnt(); - - // Return collection name (-). - GString *getCollection() { return collection; } - - // Return true if this CMap matches the specified , and - // . - GBool match(GString *collectionA, GString *cMapNameA); - - // Return the CID corresponding to the character code starting at - // , which contains bytes. Sets * to the char code, and - // * to the number of bytes used by the char code. - CID getCID(char *s, int len, CharCode *c, int *nUsed); - - // Return the writing mode (0=horizontal, 1=vertical). - int getWMode() { return wMode; } - -private: - - void parse2(CMapCache *cache, int (*getCharFunc)(void *), void *data); - CMap(GString *collectionA, GString *cMapNameA); - CMap(GString *collectionA, GString *cMapNameA, int wModeA); - void useCMap(CMapCache *cache, char *useName); - void useCMap(CMapCache *cache, Object *obj); - 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); - - GString *collection; - GString *cMapName; - GBool isIdent; // true if this CMap is an identity mapping, - // or is based on one (via usecmap) - int wMode; // writing mode (0=horizontal, 1=vertical) - CMapVectorEntry *vector; // vector for first byte (NULL for - // identity CMap) - int refCnt; -#if MULTITHREADED - GMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ - -#define cMapCacheSize 4 - -class CMapCache { -public: - - CMapCache(); - ~CMapCache(); - - // Get the CMap for the specified character collection. - // Increments its reference count; there will be one reference for - // the cache plus one for the caller of this function. Returns NULL - // on failure. - CMap *getCMap(GString *collection, GString *cMapName); - -private: - - CMap *cache[cMapCacheSize]; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Catalog.cc b/thirdparty/xpdf/3.02/src/xpdf/Catalog.cc deleted file mode 100644 index bb18083b..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Catalog.cc +++ /dev/null @@ -1,641 +0,0 @@ -//======================================================================== -// -// Catalog.cc -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "gfile.h" -#include "GList.h" -#include "Object.h" -#include "CharTypes.h" -#include "PDFDoc.h" -#include "XRef.h" -#include "Array.h" -#include "Dict.h" -#include "Page.h" -#include "Error.h" -#include "Link.h" -#include "PDFDocEncoding.h" -#include "Catalog.h" - -//------------------------------------------------------------------------ -// PageTreeNode -//------------------------------------------------------------------------ - -class PageTreeNode { -public: - - PageTreeNode(Ref refA, int countA, PageTreeNode *parentA); - ~PageTreeNode(); - - Ref ref; - int count; - PageTreeNode *parent; - GList *kids; // [PageTreeNode] - PageAttrs *attrs; -}; - -PageTreeNode::PageTreeNode(Ref refA, int countA, PageTreeNode *parentA) { - ref = refA; - count = countA; - parent = parentA; - kids = NULL; - attrs = NULL; -} - -PageTreeNode::~PageTreeNode() { - delete attrs; - if (kids) { - deleteGList(kids, PageTreeNode); - } -} - -//------------------------------------------------------------------------ -// EmbeddedFile -//------------------------------------------------------------------------ - -class EmbeddedFile { -public: - - EmbeddedFile(Unicode *nameA, int nameLenA, Object *streamRefA); - ~EmbeddedFile(); - - Unicode *name; - int nameLen; - Object streamRef; -}; - -EmbeddedFile::EmbeddedFile(Unicode *nameA, int nameLenA, - Object *streamRefA) { - name = nameA; - nameLen = nameLenA; - streamRefA->copy(&streamRef); -} - -EmbeddedFile::~EmbeddedFile() { - gfree(name); - streamRef.free(); -} - -//------------------------------------------------------------------------ -// Catalog -//------------------------------------------------------------------------ - -Catalog::Catalog(PDFDoc *docA) { - Object catDict; - Object obj, obj2; - - ok = gTrue; - doc = docA; - xref = doc->getXRef(); - pageTree = NULL; - pages = NULL; - pageRefs = NULL; - numPages = 0; - baseURI = NULL; - embeddedFiles = NULL; - - xref->getCatalog(&catDict); - if (!catDict.isDict()) { - error(errSyntaxError, -1, "Catalog object is wrong type ({0:s})", - catDict.getTypeName()); - goto err1; - } - - // read page tree - if (!readPageTree(&catDict)) { - goto err1; - } - - // read named destination dictionary - catDict.dictLookup("Dests", &dests); - - // read root of named destination tree - if (catDict.dictLookup("Names", &obj)->isDict()) - obj.dictLookup("Dests", &nameTree); - else - nameTree.initNull(); - obj.free(); - - // read base URI - if (catDict.dictLookup("URI", &obj)->isDict()) { - if (obj.dictLookup("Base", &obj2)->isString()) { - baseURI = obj2.getString()->copy(); - } - obj2.free(); - } - obj.free(); - if (!baseURI || baseURI->getLength() == 0) { - if (baseURI) { - delete baseURI; - } - if (doc->getFileName()) { - baseURI = makePathAbsolute(grabPath(doc->getFileName()->getCString())); - if (baseURI->getChar(0) == '/') { - baseURI->insert(0, "file://localhost"); - } else { - baseURI->insert(0, "file://localhost/"); - } - } else { - baseURI = new GString("file://localhost/"); - } - } - - // get the metadata stream - catDict.dictLookup("Metadata", &metadata); - - // get the structure tree root - catDict.dictLookup("StructTreeRoot", &structTreeRoot); - - // get the outline dictionary - catDict.dictLookup("Outlines", &outline); - - // get the AcroForm dictionary - catDict.dictLookup("AcroForm", &acroForm); - - // get the OCProperties dictionary - catDict.dictLookup("OCProperties", &ocProperties); - - // get the list of embedded files - readEmbeddedFileList(catDict.getDict()); - - catDict.free(); - return; - - err1: - catDict.free(); - dests.initNull(); - nameTree.initNull(); - ok = gFalse; -} - -Catalog::~Catalog() { - int i; - - if (pageTree) { - delete pageTree; - } - if (pages) { - for (i = 0; i < numPages; ++i) { - if (pages[i]) { - delete pages[i]; - } - } - gfree(pages); - gfree(pageRefs); - } - dests.free(); - nameTree.free(); - if (baseURI) { - delete baseURI; - } - metadata.free(); - structTreeRoot.free(); - outline.free(); - acroForm.free(); - ocProperties.free(); - if (embeddedFiles) { - deleteGList(embeddedFiles, EmbeddedFile); - } -} - -Page *Catalog::getPage(int i) { - if (!pages[i-1]) { - loadPage(i); - } - return pages[i-1]; -} - -Ref *Catalog::getPageRef(int i) { - if (!pages[i-1]) { - loadPage(i); - } - return &pageRefs[i-1]; -} - -GString *Catalog::readMetadata() { - GString *s; - Dict *dict; - Object obj; - int c; - - if (!metadata.isStream()) { - return NULL; - } - dict = metadata.streamGetDict(); - if (!dict->lookup("Subtype", &obj)->isName("XML")) { - error(errSyntaxWarning, -1, "Unknown Metadata type: '{0:s}'", - obj.isName() ? obj.getName() : "???"); - } - obj.free(); - s = new GString(); - metadata.streamReset(); - while ((c = metadata.streamGetChar()) != EOF) { - s->append(c); - } - metadata.streamClose(); - return s; -} - -int Catalog::findPage(int num, int gen) { - int i; - - for (i = 0; i < numPages; ++i) { - if (!pages[i]) { - loadPage(i+1); - } - if (pageRefs[i].num == num && pageRefs[i].gen == gen) - return i + 1; - } - return 0; -} - -LinkDest *Catalog::findDest(GString *name) { - LinkDest *dest; - Object obj1, obj2; - GBool found; - - // try named destination dictionary then name tree - found = gFalse; - if (dests.isDict()) { - if (!dests.dictLookup(name->getCString(), &obj1)->isNull()) - found = gTrue; - else - obj1.free(); - } - if (!found && nameTree.isDict()) { - if (!findDestInTree(&nameTree, name, &obj1)->isNull()) - 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(errSyntaxWarning, -1, "Bad named destination value"); - obj2.free(); - } else { - error(errSyntaxWarning, -1, "Bad named destination value"); - } - obj1.free(); - if (dest && !dest->isOk()) { - delete dest; - dest = NULL; - } - - return dest; -} - -Object *Catalog::findDestInTree(Object *tree, GString *name, Object *obj) { - Object names, name1; - Object kids, kid, limits, low, high; - GBool done, found; - int cmp, i; - - // leaf node - if (tree->dictLookup("Names", &names)->isArray()) { - done = found = gFalse; - for (i = 0; !done && i < names.arrayGetLength(); i += 2) { - if (names.arrayGet(i, &name1)->isString()) { - cmp = name->cmp(name1.getString()); - if (cmp == 0) { - names.arrayGet(i+1, obj); - found = gTrue; - done = gTrue; - } else if (cmp < 0) { - done = gTrue; - } - } - name1.free(); - } - names.free(); - if (!found) - obj->initNull(); - return obj; - } - names.free(); - - // root or intermediate node - done = gFalse; - if (tree->dictLookup("Kids", &kids)->isArray()) { - for (i = 0; !done && i < kids.arrayGetLength(); ++i) { - if (kids.arrayGet(i, &kid)->isDict()) { - if (kid.dictLookup("Limits", &limits)->isArray()) { - if (limits.arrayGet(0, &low)->isString() && - name->cmp(low.getString()) >= 0) { - if (limits.arrayGet(1, &high)->isString() && - name->cmp(high.getString()) <= 0) { - findDestInTree(&kid, name, obj); - done = gTrue; - } - high.free(); - } - low.free(); - } - limits.free(); - } - kid.free(); - } - } - kids.free(); - - // name was outside of ranges of all kids - if (!done) - obj->initNull(); - - return obj; -} - -GBool Catalog::readPageTree(Object *catDict) { - Object topPagesRef, topPagesObj, countObj; - int i; - - if (!catDict->dictLookupNF("Pages", &topPagesRef)->isRef()) { - error(errSyntaxError, -1, "Top-level pages reference is wrong type ({0:s})", - topPagesRef.getTypeName()); - topPagesRef.free(); - return gFalse; - } - if (!topPagesRef.fetch(xref, &topPagesObj)->isDict()) { - error(errSyntaxError, -1, "Top-level pages object is wrong type ({0:s})", - topPagesObj.getTypeName()); - topPagesObj.free(); - topPagesRef.free(); - return gFalse; - } - if (topPagesObj.dictLookup("Count", &countObj)->isInt()) { - numPages = countObj.getInt(); - if (numPages == 0) { - // Acrobat apparently scans the page tree if it sees a zero count - numPages = countPageTree(&topPagesObj); - } - } else { - // assume we got a Page node instead of a Pages node - numPages = 1; - } - countObj.free(); - if (numPages < 0) { - error(errSyntaxError, -1, "Invalid page count"); - topPagesObj.free(); - topPagesRef.free(); - numPages = 0; - return gFalse; - } - pageTree = new PageTreeNode(topPagesRef.getRef(), numPages, NULL); - topPagesObj.free(); - topPagesRef.free(); - pages = (Page **)greallocn(pages, numPages, sizeof(Page *)); - pageRefs = (Ref *)greallocn(pageRefs, numPages, sizeof(Ref)); - for (i = 0; i < numPages; ++i) { - pages[i] = NULL; - pageRefs[i].num = -1; - pageRefs[i].gen = -1; - } - return gTrue; -} - -int Catalog::countPageTree(Object *pagesObj) { - Object kids, kid; - int n, n2, i; - - if (!pagesObj->isDict()) { - return 0; - } - if (pagesObj->dictLookup("Kids", &kids)->isArray()) { - n = 0; - for (i = 0; i < kids.arrayGetLength(); ++i) { - kids.arrayGet(i, &kid); - n2 = countPageTree(&kid); - if (n2 < INT_MAX - n) { - n += n2; - } else { - error(errSyntaxError, -1, "Page tree contains too many pages"); - n = INT_MAX; - } - kid.free(); - } - } else { - n = 1; - } - kids.free(); - return n; -} - -void Catalog::loadPage(int pg) { - loadPage2(pg, pg - 1, pageTree); -} - -void Catalog::loadPage2(int pg, int relPg, PageTreeNode *node) { - Object pageRefObj, pageObj, kidsObj, kidRefObj, kidObj, countObj; - PageTreeNode *kidNode, *p; - PageAttrs *attrs; - int count, i; - - if (relPg >= node->count) { - error(errSyntaxError, -1, "Internal error in page tree"); - pages[pg-1] = new Page(doc, pg); - return; - } - - // if this node has not been filled in yet, it's either a leaf node - // or an unread internal node - if (!node->kids) { - - // check for a loop in the page tree - for (p = node->parent; p; p = p->parent) { - if (node->ref.num == p->ref.num && node->ref.gen == p->ref.gen) { - error(errSyntaxError, -1, "Loop in Pages tree"); - pages[pg-1] = new Page(doc, pg); - return; - } - } - - // fetch the Page/Pages object - pageRefObj.initRef(node->ref.num, node->ref.gen); - if (!pageRefObj.fetch(xref, &pageObj)->isDict()) { - error(errSyntaxError, -1, "Page tree object is wrong type ({0:s})", - pageObj.getTypeName()); - pageObj.free(); - pageRefObj.free(); - pages[pg-1] = new Page(doc, pg); - return; - } - - // merge the PageAttrs - attrs = new PageAttrs(node->parent ? node->parent->attrs - : (PageAttrs *)NULL, - pageObj.getDict()); - - // if "Kids" exists, it's an internal node - if (pageObj.dictLookup("Kids", &kidsObj)->isArray()) { - - // save the PageAttrs - node->attrs = attrs; - - // read the kids - node->kids = new GList(); - for (i = 0; i < kidsObj.arrayGetLength(); ++i) { - if (kidsObj.arrayGetNF(i, &kidRefObj)->isRef()) { - if (kidRefObj.fetch(xref, &kidObj)->isDict()) { - if (kidObj.dictLookup("Count", &countObj)->isInt()) { - count = countObj.getInt(); - } else { - count = 1; - } - countObj.free(); - node->kids->append(new PageTreeNode(kidRefObj.getRef(), count, - node)); - } else { - error(errSyntaxError, -1, "Page tree object is wrong type ({0:s})", - kidObj.getTypeName()); - } - kidObj.free(); - } else { - error(errSyntaxError, -1, - "Page tree reference is wrong type ({0:s})", - kidRefObj.getTypeName()); - } - kidRefObj.free(); - } - - } else { - - // create the Page object - pageRefs[pg-1] = node->ref; - pages[pg-1] = new Page(doc, pg, pageObj.getDict(), attrs); - if (!pages[pg-1]->isOk()) { - delete pages[pg-1]; - pages[pg-1] = new Page(doc, pg); - } - - } - - kidsObj.free(); - pageObj.free(); - pageRefObj.free(); - } - - // recursively descend the tree - if (node->kids) { - for (i = 0; i < node->kids->getLength(); ++i) { - kidNode = (PageTreeNode *)node->kids->get(i); - if (relPg < kidNode->count) { - loadPage2(pg, relPg, kidNode); - break; - } - relPg -= kidNode->count; - } - - // this will only happen if the page tree is invalid - // (i.e., parent count > sum of children counts) - if (i == node->kids->getLength()) { - error(errSyntaxError, -1, "Invalid page count in page tree"); - pages[pg-1] = new Page(doc, pg); - } - } -} - -void Catalog::readEmbeddedFileList(Dict *catDict) { - Object obj1, obj2; - - if (catDict->lookup("Names", &obj1)->isDict()) { - if (obj1.dictLookup("EmbeddedFiles", &obj2)->isDict()) { - embeddedFiles = new GList(); - readEmbeddedFileTree(&obj2); - } - obj2.free(); - } - obj1.free(); -} - -void Catalog::readEmbeddedFileTree(Object *node) { - Object obj1, obj2, obj3, obj4, obj5; - GString *s; - Unicode *name; - int nameLen, i, j; - - if (node->dictLookup("Kids", &obj1)->isArray()) { - for (i = 0; i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGet(i, &obj2)->isDict()) { - readEmbeddedFileTree(&obj2); - } - obj2.free(); - } - } else { - obj1.free(); - if (node->dictLookup("Names", &obj1)->isArray()) { - for (i = 0; i+1 < obj1.arrayGetLength(); ++i) { - obj1.arrayGet(i, &obj2); - obj1.arrayGet(i+1, &obj3); - if (obj2.isString() && obj3.isDict()) { - if (obj3.dictLookup("EF", &obj4)->isDict()) { - if (obj4.dictLookupNF("F", &obj5)->isRef()) { - s = obj2.getString(); - if ((s->getChar(0) & 0xff) == 0xfe && - (s->getChar(1) & 0xff) == 0xff) { - nameLen = (s->getLength() - 2) / 2; - name = (Unicode *)gmallocn(nameLen, sizeof(Unicode)); - for (j = 0; j < nameLen; ++j) { - name[j] = ((s->getChar(2 + 2*j) & 0xff) << 8) | - (s->getChar(3 + 2*j) & 0xff); - } - } else { - nameLen = s->getLength(); - name = (Unicode *)gmallocn(nameLen, sizeof(Unicode)); - for (j = 0; j < nameLen; ++j) { - name[j] = pdfDocEncoding[s->getChar(j) & 0xff]; - } - } - embeddedFiles->append(new EmbeddedFile(name, nameLen, &obj5)); - } - obj5.free(); - } - obj4.free(); - } - obj2.free(); - obj3.free(); - } - } - } - obj1.free(); -} - -int Catalog::getNumEmbeddedFiles() { - return embeddedFiles ? embeddedFiles->getLength() : 0; -} - -Unicode *Catalog::getEmbeddedFileName(int idx) { - return ((EmbeddedFile *)embeddedFiles->get(idx))->name; -} - -int Catalog::getEmbeddedFileNameLength(int idx) { - return ((EmbeddedFile *)embeddedFiles->get(idx))->nameLen; -} - -Object *Catalog::getEmbeddedFileStreamObj(int idx, Object *strObj) { - ((EmbeddedFile *)embeddedFiles->get(idx))->streamRef.fetch(xref, strObj); - if (!strObj->isStream()) { - strObj->free(); - return NULL; - } - return strObj; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Catalog.h b/thirdparty/xpdf/3.02/src/xpdf/Catalog.h deleted file mode 100644 index a34ed889..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Catalog.h +++ /dev/null @@ -1,118 +0,0 @@ -//======================================================================== -// -// Catalog.h -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CATALOG_H -#define CATALOG_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "CharTypes.h" - -class GList; -class PDFDoc; -class XRef; -class Object; -class Page; -class PageAttrs; -struct Ref; -class LinkDest; -class PageTreeNode; - -//------------------------------------------------------------------------ -// Catalog -//------------------------------------------------------------------------ - -class Catalog { -public: - - // Constructor. - Catalog(PDFDoc *docA); - - // Destructor. - ~Catalog(); - - // Is catalog valid? - GBool isOk() { return ok; } - - // Get number of pages. - int getNumPages() { return numPages; } - - // 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. - GString *getBaseURI() { return baseURI; } - - // Return the contents of the metadata stream, or NULL if there is - // no metadata. - GString *readMetadata(); - - // Return the structure tree root object. - Object *getStructTreeRoot() { return &structTreeRoot; } - - // 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 is not a destination. - LinkDest *findDest(GString *name); - - Object *getDests() { return &dests; } - - Object *getNameTree() { return &nameTree; } - - Object *getOutline() { return &outline; } - - Object *getAcroForm() { return &acroForm; } - - Object *getOCProperties() { return &ocProperties; } - - // Get the list of embedded files. - int getNumEmbeddedFiles(); - Unicode *getEmbeddedFileName(int idx); - int getEmbeddedFileNameLength(int idx); - Object *getEmbeddedFileStreamObj(int idx, Object *strObj); - -private: - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - PageTreeNode *pageTree; // the page tree - Page **pages; // array of pages - Ref *pageRefs; // object ID for each page - int numPages; // number of pages - int pagesSize; // size of pages array - Object dests; // named destination dictionary - Object nameTree; // name tree - GString *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 ocProperties; // OCProperties dictionary - GList *embeddedFiles; // embedded file list [EmbeddedFile] - GBool ok; // true if catalog is valid - - Object *findDestInTree(Object *tree, GString *name, Object *obj); - GBool readPageTree(Object *catDict); - int countPageTree(Object *pagesObj); - void loadPage(int pg); - void loadPage2(int pg, int relPg, PageTreeNode *node); - void readEmbeddedFileList(Dict *catDict); - void readEmbeddedFileTree(Object *node); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.cc b/thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.cc deleted file mode 100644 index 6434f2d6..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.cc +++ /dev/null @@ -1,585 +0,0 @@ -//======================================================================== -// -// CharCodeToUnicode.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "gfile.h" -#include "GString.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PSTokenizer.h" -#include "CharCodeToUnicode.h" - -//------------------------------------------------------------------------ - -#define maxUnicodeString 8 - -struct CharCodeToUnicodeString { - CharCode c; - Unicode u[maxUnicodeString]; - 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::makeIdentityMapping() { - return new CharCodeToUnicode(); -} - -CharCodeToUnicode *CharCodeToUnicode::parseCIDToUnicode(GString *fileName, - GString *collection) { - FILE *f; - Unicode *mapA; - CharCode size, mapLenA; - char buf[64]; - Unicode u; - CharCodeToUnicode *ctu; - - if (!(f = openFile(fileName->getCString(), "r"))) { - error(errSyntaxError, -1, "Couldn't open cidToUnicode file '{0:t}'", - fileName); - 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(errSyntaxWarning, -1, - "Bad line ({0:d}) in cidToUnicode file '{1:t}'", - (int)(mapLenA + 1), fileName); - mapA[mapLenA] = 0; - } - ++mapLenA; - } - fclose(f); - - ctu = new CharCodeToUnicode(collection->copy(), mapA, mapLenA, gTrue, - NULL, 0, 0); - gfree(mapA); - return ctu; -} - -CharCodeToUnicode *CharCodeToUnicode::parseUnicodeToUnicode( - GString *fileName) { - FILE *f; - Unicode *mapA; - CharCodeToUnicodeString *sMapA; - CharCode size, oldSize, len, sMapSizeA, sMapLenA; - char buf[256]; - char *tok; - Unicode u0; - Unicode uBuf[maxUnicodeString]; - CharCodeToUnicode *ctu; - int line, n, i; - - if (!(f = openFile(fileName->getCString(), "r"))) { - error(errSyntaxError, -1, "Couldn't open unicodeToUnicode file '{0:t}'", - fileName); - 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(buf, " \t\r\n")) || - sscanf(tok, "%x", &u0) != 1) { - error(errSyntaxWarning, -1, - "Bad line ({0:d}) in unicodeToUnicode file '{1:t}'", - line, fileName); - continue; - } - n = 0; - while (n < maxUnicodeString) { - if (!(tok = strtok(NULL, " \t\r\n"))) { - break; - } - if (sscanf(tok, "%x", &uBuf[n]) != 1) { - error(errSyntaxWarning, -1, - "Bad line ({0:d}) in unicodeToUnicode file '{1:t}'", - line, fileName); - break; - } - ++n; - } - if (n < 1) { - error(errSyntaxWarning, -1, - "Bad line ({0:d}) in unicodeToUnicode file '{1:t}'", - line, fileName); - 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; - 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); - return ctu; -} - -CharCodeToUnicode *CharCodeToUnicode::make8BitToUnicode(Unicode *toUnicode) { - return new CharCodeToUnicode(NULL, toUnicode, 256, gTrue, NULL, 0, 0); -} - -CharCodeToUnicode *CharCodeToUnicode::parseCMap(GString *buf, int nBits) { - CharCodeToUnicode *ctu; - char *p; - - ctu = new CharCodeToUnicode(NULL); - p = buf->getCString(); - ctu->parseCMap1(&getCharFromString, &p, nBits); - return ctu; -} - -void CharCodeToUnicode::mergeCMap(GString *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 n1, n2, n3; - CharCode i; - CharCode maxCode, code1, code2; - GString *name; - FILE *f; - - maxCode = (nBits == 8) ? 0xff : (nBits == 16) ? 0xffff : 0xffffffff; - 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 GString(tok1 + 1); - if ((f = globalParams->findToUnicodeFile(name))) { - parseCMap1(&getCharFromFile, f, nBits); - fclose(f); - } else { - error(errSyntaxError, -1, - "Couldn't find ToUnicode CMap file for '{1:t}'", - name); - } - 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(errSyntaxWarning, -1, - "Illegal entry in bfchar block in ToUnicode CMap"); - break; - } - if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && - tok2[0] == '<' && tok2[n2 - 1] == '>')) { - error(errSyntaxWarning, -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(errSyntaxWarning, -1, - "Illegal entry in bfchar block in ToUnicode CMap"); - continue; - } - if (code1 > maxCode) { - error(errSyntaxWarning, -1, - "Invalid entry in bfchar block in ToUnicode CMap"); - } - 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(errSyntaxWarning, -1, - "Illegal entry in bfrange block in ToUnicode CMap"); - break; - } - if (!(tok1[0] == '<' && tok1[n1 - 1] == '>' && - tok2[0] == '<' && tok2[n2 - 1] == '>')) { - error(errSyntaxWarning, - -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(errSyntaxWarning, -1, - "Illegal entry in bfrange block in ToUnicode CMap"); - continue; - } - if (code1 > maxCode || code2 > maxCode) { - error(errSyntaxWarning, -1, - "Invalid entry in bfrange block in ToUnicode CMap"); - } - 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(errSyntaxWarning, -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(errSyntaxWarning, -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; - 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(errSyntaxWarning, -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; - if ((sMap[sMapLen].len = n / 4) > maxUnicodeString) { - sMap[sMapLen].len = maxUnicodeString; - } - 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(errSyntaxWarning, -1, "Illegal entry in ToUnicode CMap"); - return; - } - } - sMap[sMapLen].u[sMap[sMapLen].len - 1] += offset; - ++sMapLen; - } -} - -CharCodeToUnicode::CharCodeToUnicode() { - tag = NULL; - map = NULL; - mapLen = 0; - sMap = NULL; - sMapLen = sMapSize = 0; - refCnt = 1; -#if MULTITHREADED - gInitMutex(&mutex); -#endif -} - -CharCodeToUnicode::CharCodeToUnicode(GString *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(GString *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); - 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(GString *tagA) { - return tag && !tag->cmp(tagA); -} - -void CharCodeToUnicode::setMapping(CharCode c, Unicode *u, int len) { - int i, j; - - if (!map) { - return; - } - if (len == 1) { - map[c] = u[0]; - } else { - for (i = 0; i < sMapLen; ++i) { - if (sMap[i].c == c) { - 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; - for (j = 0; j < len && j < maxUnicodeString; ++j) { - sMap[i].u[j] = u[j]; - } - } -} - -int CharCodeToUnicode::mapToUnicode(CharCode c, Unicode *u, int size) { - int i, j; - - if (!map) { - u[0] = (Unicode)c; - return 1; - } - if (c >= mapLen) { - return 0; - } - if (map[c]) { - u[0] = map[c]; - return 1; - } - for (i = 0; i < sMapLen; ++i) { - if (sMap[i].c == c) { - for (j = 0; j < sMap[i].len && j < size; ++j) { - u[j] = sMap[i].u[j]; - } - return j; - } - } - 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(GString *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/thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.h b/thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.h deleted file mode 100644 index b4ccd043..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CharCodeToUnicode.h +++ /dev/null @@ -1,121 +0,0 @@ -//======================================================================== -// -// CharCodeToUnicode.h -// -// Mapping from character codes to Unicode. -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef CHARCODETOUNICODE_H -#define CHARCODETOUNICODE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "CharTypes.h" - -#if MULTITHREADED -#include "GMutex.h" -#endif - -struct CharCodeToUnicodeString; - -//------------------------------------------------------------------------ - -class CharCodeToUnicode { -public: - - // Create an identity mapping (Unicode = CharCode). - static CharCodeToUnicode *makeIdentityMapping(); - - // Read the CID-to-Unicode mapping for from the file - // specified by . Sets the initial reference count to 1. - // Returns NULL on failure. - static CharCodeToUnicode *parseCIDToUnicode(GString *fileName, - GString *collection); - - // Create a Unicode-to-Unicode mapping from the file specified by - // . Sets the initial reference count to 1. Returns NULL - // on failure. - static CharCodeToUnicode *parseUnicodeToUnicode(GString *fileName); - - // Create the CharCode-to-Unicode mapping for an 8-bit font. - // 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(GString *buf, int nBits); - - // Parse a ToUnicode CMap for an 8- or 16-bit font, merging it into - // . - void mergeCMap(GString *buf, int nBits); - - ~CharCodeToUnicode(); - - void incRefCnt(); - void decRefCnt(); - - // Return true if this mapping matches the specified . - GBool match(GString *tagA); - - // Set the mapping for . - void setMapping(CharCode c, Unicode *u, int len); - - // Map a CharCode to Unicode. - int mapToUnicode(CharCode c, Unicode *u, int size); - - // 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(); - CharCodeToUnicode(GString *tagA); - CharCodeToUnicode(GString *tagA, Unicode *mapA, - CharCode mapLenA, GBool copyMap, - CharCodeToUnicodeString *sMapA, - int sMapLenA, int sMapSizeA); - - GString *tag; - Unicode *map; - CharCode mapLen; - CharCodeToUnicodeString *sMap; - int sMapLen, sMapSize; - int refCnt; -#if MULTITHREADED - GMutex mutex; -#endif -}; - -//------------------------------------------------------------------------ - -class CharCodeToUnicodeCache { -public: - - CharCodeToUnicodeCache(int sizeA); - ~CharCodeToUnicodeCache(); - - // Get the CharCodeToUnicode object for . Increments its - // reference count; there will be one reference for the cache plus - // one for the caller of this function. Returns NULL on failure. - CharCodeToUnicode *getCharCodeToUnicode(GString *tag); - - // Insert into the cache, in the most-recently-used position. - void add(CharCodeToUnicode *ctu); - -private: - - CharCodeToUnicode **cache; - int size; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/CharTypes.h b/thirdparty/xpdf/3.02/src/xpdf/CharTypes.h deleted file mode 100644 index d0df630d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/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/thirdparty/xpdf/3.02/src/xpdf/CompactFontTables.h b/thirdparty/xpdf/3.02/src/xpdf/CompactFontTables.h deleted file mode 100644 index 28e16e77..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CompactFontTables.h +++ /dev/null @@ -1,464 +0,0 @@ -//======================================================================== -// -// CompactFontTables.h -// -// Copyright 1999-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef COMPACTFONTINFO_H -#define COMPACTFONTINFO_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 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/thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.cc deleted file mode 100644 index 78751102..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.cc +++ /dev/null @@ -1,61 +0,0 @@ -//======================================================================== -// -// CoreOutputDev.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "Object.h" -#include "TextOutputDev.h" -#include "CoreOutputDev.h" - -//------------------------------------------------------------------------ -// CoreOutputDev -//------------------------------------------------------------------------ - -CoreOutputDev::CoreOutputDev(SplashColorMode colorModeA, int bitmapRowPadA, - GBool reverseVideoA, SplashColorPtr paperColorA, - GBool incrementalUpdateA, - CoreOutRedrawCbk redrawCbkA, - void *redrawCbkDataA): - SplashOutputDev(colorModeA, bitmapRowPadA, reverseVideoA, paperColorA) -{ - incrementalUpdate = incrementalUpdateA; - redrawCbk = redrawCbkA; - redrawCbkData = redrawCbkDataA; -} - -CoreOutputDev::~CoreOutputDev() { -} - -void CoreOutputDev::endPage() { - SplashOutputDev::endPage(); - if (!incrementalUpdate) { - (*redrawCbk)(redrawCbkData, 0, 0, getBitmapWidth(), getBitmapHeight(), - gTrue); - } -} - -void CoreOutputDev::dump() { - int x0, y0, x1, y1; - - if (incrementalUpdate) { - getModRegion(&x0, &y0, &x1, &y1); - clearModRegion(); - if (x1 >= x0 && y1 >= y0) { - (*redrawCbk)(redrawCbkData, x0, y0, x1, y1, gFalse); - } - } -} - -void CoreOutputDev::clear() { - startDoc(NULL); - startPage(0, NULL); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.h deleted file mode 100644 index 006d3517..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/CoreOutputDev.h +++ /dev/null @@ -1,61 +0,0 @@ -//======================================================================== -// -// CoreOutputDev.h -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef COREOUTPUTDEV_H -#define COREOUTPUTDEV_H - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "SplashTypes.h" -#include "SplashOutputDev.h" - -class TextPage; - -//------------------------------------------------------------------------ - -typedef void (*CoreOutRedrawCbk)(void *data, int x0, int y0, int x1, int y1, - GBool composited); - -//------------------------------------------------------------------------ -// CoreOutputDev -//------------------------------------------------------------------------ - -class CoreOutputDev: public SplashOutputDev { -public: - - CoreOutputDev(SplashColorMode colorModeA, int bitmapRowPadA, - GBool reverseVideoA, SplashColorPtr paperColorA, - GBool incrementalUpdateA, - CoreOutRedrawCbk redrawCbkA, - void *redrawCbkDataA); - - virtual ~CoreOutputDev(); - - //----- initialization and control - - // End a page. - virtual void endPage(); - - // Dump page contents to display. - virtual void dump(); - - //----- special access - - // Clear out the document (used when displaying an empty window). - void clear(); - -private: - - GBool incrementalUpdate; // incrementally update the display? - CoreOutRedrawCbk redrawCbk; - void *redrawCbkData; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Decrypt.cc b/thirdparty/xpdf/3.02/src/xpdf/Decrypt.cc deleted file mode 100644 index 9f271f04..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Decrypt.cc +++ /dev/null @@ -1,784 +0,0 @@ -//======================================================================== -// -// Decrypt.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "gmem.h" -#include "Decrypt.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 void md5(Guchar *msg, int msgLen, Guchar *digest); - -static 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, - GString *ownerKey, GString *userKey, - int permissions, GString *fileID, - GString *ownerPassword, GString *userPassword, - Guchar *fileKey, GBool encryptMetadata, - GBool *ownerPasswordOk) { - Guchar test[32], test2[32]; - GString *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 GString((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, - GString *ownerKey, GString *userKey, - int permissions, GString *fileID, - GString *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; - } - md5(objKey, n, objKey); - if ((objKeyLength = keyLength + 5) > 16) { - objKeyLength = 16; - } -} - -DecryptStream::~DecryptStream() { - delete str; -} - -void DecryptStream::reset() { - int i; - - 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::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; - } - 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; - 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 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 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 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]; - if (n < 1 || n > 16) { // this should never happen - n = 16; - } - for (i = 15; i >= n; --i) { - s->buf[i] = s->buf[i-n]; - } - s->bufIdx = n; - } -} - -//------------------------------------------------------------------------ -// 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); -} - -static void 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; - - // sanity check - if (msgLen < 0) { - return; - } - - // 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/thirdparty/xpdf/3.02/src/xpdf/Decrypt.h b/thirdparty/xpdf/3.02/src/xpdf/Decrypt.h deleted file mode 100644 index 56f34b77..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Decrypt.h +++ /dev/null @@ -1,95 +0,0 @@ -//======================================================================== -// -// Decrypt.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef DECRYPT_H -#define DECRYPT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "GString.h" -#include "Object.h" -#include "Stream.h" - -//------------------------------------------------------------------------ -// Decrypt -//------------------------------------------------------------------------ - -class Decrypt { -public: - - // Generate a file key. The buffer must have space for at - // least 16 bytes. Checks and then - // and returns true if either is correct. Sets 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, - GString *ownerKey, GString *userKey, - int permissions, GString *fileID, - GString *ownerPassword, GString *userPassword, - Guchar *fileKey, GBool encryptMetadata, - GBool *ownerPasswordOk); - -private: - - static GBool makeFileKey2(int encVersion, int encRevision, int keyLength, - GString *ownerKey, GString *userKey, - int permissions, GString *fileID, - GString *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 GBool isBinary(GBool last); - virtual Stream *getUndecodedStream() { return this; } - -private: - - CryptAlgorithm algo; - int objKeyLength; - Guchar objKey[16 + 9]; - - union { - DecryptRC4State rc4; - DecryptAESState aes; - } state; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Dict.cc b/thirdparty/xpdf/3.02/src/xpdf/Dict.cc deleted file mode 100644 index 0acfd18e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Dict.cc +++ /dev/null @@ -1,96 +0,0 @@ -//======================================================================== -// -// Dict.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "Object.h" -#include "XRef.h" -#include "Dict.h" - -//------------------------------------------------------------------------ -// Dict -//------------------------------------------------------------------------ - -Dict::Dict(XRef *xrefA) { - xref = xrefA; - entries = NULL; - size = length = 0; - ref = 1; -} - -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 (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) { - int i; - - for (i = 0; i < length; ++i) { - if (!strcmp(key, entries[i].key)) - return &entries[i]; - } - return NULL; -} - -GBool Dict::is(char *type) { - DictEntry *e; - - return (e = find("Type")) && e->val.isName(type); -} - -Object *Dict::lookup(char *key, Object *obj, int recursion) { - DictEntry *e; - - return (e = find(key)) ? e->val.fetch(xref, obj, recursion) - : obj->initNull(); -} - -Object *Dict::lookupNF(char *key, Object *obj) { - DictEntry *e; - - return (e = find(key)) ? e->val.copy(obj) : obj->initNull(); -} - -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/thirdparty/xpdf/3.02/src/xpdf/Dict.h b/thirdparty/xpdf/3.02/src/xpdf/Dict.h deleted file mode 100644 index 16d3e143..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Dict.h +++ /dev/null @@ -1,77 +0,0 @@ -//======================================================================== -// -// Dict.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef DICT_H -#define DICT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -//------------------------------------------------------------------------ -// Dict -//------------------------------------------------------------------------ - -struct DictEntry { - char *key; - Object val; -}; - -class Dict { -public: - - // Constructor. - Dict(XRef *xrefA); - - // 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); - - // Check if dictionary is of specified type. - GBool is(char *type); - - // Look up an entry and return the value. Returns a null object - // if is not in the dictionary. - Object *lookup(char *key, Object *obj, int recursion = 0); - Object *lookupNF(char *key, Object *obj); - - // 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; } - -private: - - XRef *xref; // the xref table for this PDF file - DictEntry *entries; // array of entries - int size; // size of array - int length; // number of entries in dictionary - int ref; // reference count - - DictEntry *find(char *key); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Error.cc b/thirdparty/xpdf/3.02/src/xpdf/Error.cc deleted file mode 100644 index 348a90c8..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Error.cc +++ /dev/null @@ -1,68 +0,0 @@ -//======================================================================== -// -// Error.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "GString.h" -#include "GlobalParams.h" -#include "Error.h" - -static char *errorCategoryNames[] = { - "Syntax Warning", - "Syntax Error", - "Config Error", - "Command Line Error", - "I/O Error", - "Permission Error", - "Unimplemented Feature", - "Internal Error" -}; - -static void (*errorCbk)(void *data, ErrorCategory category, - int pos, char *msg) = NULL; -static void *errorCbkData = NULL; - -void setErrorCallback(void (*cbk)(void *data, ErrorCategory category, - int pos, char *msg), - void *data) { - errorCbk = cbk; - errorCbkData = data; -} - -void CDECL error(ErrorCategory category, int pos, char *msg, ...) { - va_list args; - GString *s; - - // NB: this can be called before the globalParams object is created - if (!errorCbk && globalParams && globalParams->getErrQuiet()) { - return; - } - va_start(args, msg); - s = GString::formatv(msg, args); - va_end(args); - if (errorCbk) { - (*errorCbk)(errorCbkData, category, pos, s->getCString()); - } else { - if (pos >= 0) { - fprintf(stderr, "%s (%d): %s\n", - errorCategoryNames[category], pos, s->getCString()); - } else { - fprintf(stderr, "%s: %s\n", - errorCategoryNames[category], s->getCString()); - } - fflush(stderr); - } - delete s; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Error.h b/thirdparty/xpdf/3.02/src/xpdf/Error.h deleted file mode 100644 index 63f27fc6..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Error.h +++ /dev/null @@ -1,42 +0,0 @@ -//======================================================================== -// -// Error.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef ERROR_H -#define ERROR_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "config.h" - -enum ErrorCategory { - errSyntaxWarning, // PDF syntax error which can be worked around; - // output will probably be correct - errSyntaxError, // PDF syntax error which can be worked around; - // output will probably be incorrect - errConfig, // error in Xpdf config info (xpdfrc file, etc.) - errCommandLine, // error in user-supplied parameters, action not - // allowed, etc. (only used by command-line tools) - errIO, // error in file I/O - errNotAllowed, // action not allowed by PDF permission bits - errUnimplemented, // unimplemented PDF feature - display will be - // incorrect - errInternal // internal error - malfunction within the Xpdf code -}; - -extern void setErrorCallback(void (*cbk)(void *data, ErrorCategory category, - int pos, char *msg), - void *data); - -extern void CDECL error(ErrorCategory category, int pos, char *msg, ...); - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/ErrorCodes.h b/thirdparty/xpdf/3.02/src/xpdf/ErrorCodes.h deleted file mode 100644 index b28528df..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/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/thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.cc b/thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.cc deleted file mode 100644 index f3b9280a..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.cc +++ /dev/null @@ -1,1824 +0,0 @@ -//======================================================================== -// -// FontEncodingTables.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include -#include -#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/thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.h b/thirdparty/xpdf/3.02/src/xpdf/FontEncodingTables.h deleted file mode 100644 index 8b0a1e7e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/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/thirdparty/xpdf/3.02/src/xpdf/Function.cc b/thirdparty/xpdf/3.02/src/xpdf/Function.cc deleted file mode 100644 index 68ca37b0..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Function.cc +++ /dev/null @@ -1,1663 +0,0 @@ -//======================================================================== -// -// Function.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include "gmem.h" -#include "Object.h" -#include "Dict.h" -#include "Stream.h" -#include "Error.h" -#include "Function.h" - -//------------------------------------------------------------------------ - -// Max depth of nested functions. This is used to catch infinite -// loops in the function object structure. -#define recursionLimit 8 - -//------------------------------------------------------------------------ -// Function -//------------------------------------------------------------------------ - -Function::Function() { -} - -Function::~Function() { -} - -Function *Function::parse(Object *funcObj, int recursion) { - Function *func; - Dict *dict; - int funcType; - Object obj1; - - if (recursion > recursionLimit) { - error(errSyntaxError, -1, "Loop detected in function objects"); - return NULL; - } - - if (funcObj->isStream()) { - dict = funcObj->streamGetDict(); - } else if (funcObj->isDict()) { - dict = funcObj->getDict(); - } else if (funcObj->isName("Identity")) { - return new IdentityFunction(); - } else { - error(errSyntaxError, -1, "Expected function dictionary or stream"); - return NULL; - } - - if (!dict->lookup("FunctionType", &obj1)->isInt()) { - error(errSyntaxError, -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, recursion); - } else if (funcType == 4) { - func = new PostScriptFunction(funcObj, dict); - } else { - error(errSyntaxError, -1, "Unimplemented function type ({0: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(errSyntaxError, -1, "Function is missing domain"); - goto err2; - } - m = obj1.arrayGetLength() / 2; - if (m > funcMaxInputs) { - error(errSyntaxError, -1, - "Functions with more than {0:d} inputs are unsupported", - funcMaxInputs); - goto err2; - } - for (i = 0; i < m; ++i) { - obj1.arrayGet(2*i, &obj2); - if (!obj2.isNum()) { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -1, - "Functions with more than {0:d} outputs are unsupported", - funcMaxOutputs); - goto err2; - } - for (i = 0; i < n; ++i) { - obj1.arrayGet(2*i, &obj2); - if (!obj2.isNum()) { - error(errSyntaxError, -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(errSyntaxError, -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; - double in[funcMaxInputs]; - int i, j, t, bit, idx; - - idxOffset = NULL; - samples = NULL; - sBuf = NULL; - ok = gFalse; - - //----- initialize the generic stuff - if (!init(dict)) { - goto err1; - } - if (!hasRange) { - error(errSyntaxError, -1, "Type 0 function is missing range"); - goto err1; - } - if (m > sampledFuncMaxInputs) { - error(errSyntaxError, -1, - "Sampled functions with more than {0:d} inputs are unsupported", - sampledFuncMaxInputs); - goto err1; - } - - //----- buffer - sBuf = (double *)gmallocn(1 << m, sizeof(double)); - - //----- get the stream - if (!funcObj->isStream()) { - error(errSyntaxError, -1, "Type 0 function isn't a stream"); - goto err1; - } - str = funcObj->getStream(); - - //----- Size - if (!dict->lookup("Size", &obj1)->isArray() || - obj1.arrayGetLength() != m) { - error(errSyntaxError, -1, "Function has missing or invalid size array"); - goto err2; - } - for (i = 0; i < m; ++i) { - obj1.arrayGet(i, &obj2); - if (!obj2.isInt()) { - error(errSyntaxError, -1, "Illegal value in function size array"); - goto err3; - } - sampleSize[i] = obj2.getInt(); - if (sampleSize[i] <= 0) { - error(errSyntaxError, -1, "Illegal non-positive value in function size array"); - goto err3; - } - obj2.free(); - } - obj1.free(); - idxOffset = (int *)gmallocn(1 << m, sizeof(int)); - for (i = 0; i < (1<= 1; --j, t <<= 1) { - if (sampleSize[j] == 1) { - bit = 0; - } else { - bit = (t >> (m - 1)) & 1; - } - idx = (idx + bit) * sampleSize[j-1]; - } - if (sampleSize[0] == 1) { - bit = 0; - } else { - bit = (t >> (m - 1)) & 1; - } - idxOffset[i] = (idx + bit) * n; - } - - //----- BitsPerSample - if (!dict->lookup("BitsPerSample", &obj1)->isInt()) { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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(); - - // set up the cache - for (i = 0; i < m; ++i) { - in[i] = domain[i][0]; - cacheIn[i] = in[i] - 1; - } - transform(in, cacheOut); - - ok = gTrue; - return; - - err3: - obj2.free(); - err2: - obj1.free(); - err1: - return; -} - -SampledFunction::~SampledFunction() { - if (idxOffset) { - gfree(idxOffset); - } - if (samples) { - gfree(samples); - } - if (sBuf) { - gfree(sBuf); - } -} - -SampledFunction::SampledFunction(SampledFunction *func) { - memcpy(this, func, sizeof(SampledFunction)); - idxOffset = (int *)gmallocn(1 << m, sizeof(int)); - memcpy(idxOffset, func->idxOffset, (1 << m) * sizeof(int)); - 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]; - double efrac0[funcMaxInputs]; - double efrac1[funcMaxInputs]; - int i, j, k, idx0, t; - - // check the cache - for (i = 0; i < m; ++i) { - if (in[i] != cacheIn[i]) { - break; - } - } - if (i == m) { - for (i = 0; i < n; ++i) { - out[i] = cacheOut[i]; - } - return; - } - - // 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 != x) { // x!=x is a more portable version of isnan(x) - x = 0; - } else if (x > sampleSize[i] - 1) { - x = sampleSize[i] - 1; - } - e[i] = (int)x; - if (e[i] == sampleSize[i] - 1 && sampleSize[i] > 1) { - // this happens if in[i] = domain[i][1] - e[i] = sampleSize[i] - 2; - } - efrac1[i] = x - e[i]; - efrac0[i] = 1 - efrac1[i]; - } - - // compute index for the first sample to be used - idx0 = 0; - for (k = m - 1; k >= 1; --k) { - idx0 = (idx0 + e[k]) * sampleSize[k-1]; - } - idx0 = (idx0 + e[0]) * n; - - // 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<>= 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]; - } - } - - // save current result in the cache - for (i = 0; i < m; ++i) { - cacheIn[i] = in[i]; - } - for (i = 0; i < n; ++i) { - cacheOut[i] = out[i]; - } -} - -//------------------------------------------------------------------------ -// 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(errSyntaxError, -1, "Exponential function with more than one input"); - goto err1; - } - - //----- C0 - if (dict->lookup("C0", &obj1)->isArray()) { - if (hasRange && obj1.arrayGetLength() != n) { - error(errSyntaxError, -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(errSyntaxError, -1, "Illegal value in function C0 array"); - goto err3; - } - c0[i] = obj2.getNum(); - obj2.free(); - } - } else { - if (hasRange && n != 1) { - error(errSyntaxError, -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(errSyntaxError, -1, "Function's C1 array is wrong length"); - goto err2; - } - for (i = 0; i < n; ++i) { - obj1.arrayGet(i, &obj2); - if (!obj2.isNum()) { - error(errSyntaxError, -1, "Illegal value in function C1 array"); - goto err3; - } - c1[i] = obj2.getNum(); - obj2.free(); - } - } else { - if (n != 1) { - error(errSyntaxError, -1, "Function's C1 array is wrong length"); - goto err2; - } - c1[0] = 1; - } - obj1.free(); - - //----- N (exponent) - if (!dict->lookup("N", &obj1)->isNum()) { - error(errSyntaxError, -1, "Function has missing or invalid N"); - goto err2; - } - e = obj1.getNum(); - obj1.free(); - - 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] + 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, - int recursion) { - 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(errSyntaxError, -1, "Stitching function with more than one input"); - goto err1; - } - - //----- Functions - if (!dict->lookup("Functions", &obj1)->isArray()) { - error(errSyntaxError, -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) { - if (!(funcs[i] = Function::parse(obj1.arrayGet(i, &obj2), - recursion + 1))) { - goto err2; - } - if (funcs[i]->getInputSize() != 1 || - (i > 0 && funcs[i]->getOutputSize() != funcs[0]->getOutputSize())) { - error(errSyntaxError, -1, - "Incompatible subfunctions in stitching function"); - goto err2; - } - obj2.free(); - } - obj1.free(); - - //----- Bounds - if (!dict->lookup("Bounds", &obj1)->isArray() || - obj1.arrayGetLength() != k - 1) { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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]); - } - } - - ok = gTrue; - return; - - err2: - obj2.free(); - err1: - obj1.free(); -} - -StitchingFunction::StitchingFunction(StitchingFunction *func) { - int i; - - memcpy(this, func, sizeof(StitchingFunction)); - 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. -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= | -// +---------------------------------+ -// | psBlock: ptr= | -// +---------------------------------+ -// | if clause | -// | ... | -// | psOperator: psOpReturn | -// +---------------------------------+ -// | else clause | -// | ... | -// | psOperator: psOpReturn | -// +---------------------------------+ -// | ... | -// -// For 'if', pointer 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 pushBool(GBool booln); - void pushInt(int intg); - void pushReal(double real); - GBool popBool(); - int popInt(); - double popNum(); - 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); - void pop(); - -private: - - GBool checkOverflow(int n = 1); - GBool checkUnderflow(); - GBool checkType(PSObjectType t1, PSObjectType t2); - - PSObject stack[psStackSize]; - int sp; -}; - -GBool PSStack::checkOverflow(int n) { - if (sp - n < 0) { - error(errSyntaxError, -1, "Stack overflow in PostScript function"); - return gFalse; - } - return gTrue; -} - -GBool PSStack::checkUnderflow() { - if (sp == psStackSize) { - error(errSyntaxError, -1, "Stack underflow in PostScript function"); - return gFalse; - } - return gTrue; -} - -GBool PSStack::checkType(PSObjectType t1, PSObjectType t2) { - if (stack[sp].type != t1 && stack[sp].type != t2) { - error(errSyntaxError, -1, "Type mismatch in PostScript function"); - return gFalse; - } - return gTrue; -} - -void PSStack::pushBool(GBool booln) { - if (checkOverflow()) { - stack[--sp].type = psBool; - stack[sp].booln = booln; - } -} - -void PSStack::pushInt(int intg) { - if (checkOverflow()) { - stack[--sp].type = psInt; - stack[sp].intg = intg; - } -} - -void PSStack::pushReal(double real) { - if (checkOverflow()) { - stack[--sp].type = psReal; - stack[sp].real = real; - } -} - -GBool PSStack::popBool() { - if (checkUnderflow() && checkType(psBool, psBool)) { - return stack[sp++].booln; - } - return gFalse; -} - -int PSStack::popInt() { - if (checkUnderflow() && checkType(psInt, psInt)) { - return stack[sp++].intg; - } - return 0; -} - -double PSStack::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; -} - -void PSStack::copy(int n) { - int i; - - if (sp + n > psStackSize) { - error(errSyntaxError, -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 (j >= 0) { - j %= n; - } else { - j = -j % n; - if (j != 0) { - j = n - j; - } - } - if (n <= 0 || j == 0 || n > psStackSize || sp + n > psStackSize) { - return; - } - 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; - } -} - -void PSStack::index(int i) { - if (!checkOverflow()) { - return; - } - --sp; - stack[sp] = stack[sp + 1 + i]; -} - -void PSStack::pop() { - if (!checkUnderflow()) { - return; - } - ++sp; -} - -PostScriptFunction::PostScriptFunction(Object *funcObj, Dict *dict) { - Stream *str; - int codePtr; - GString *tok; - - codeString = NULL; - code = NULL; - codeSize = 0; - ok = gFalse; - - //----- initialize the generic stuff - if (!init(dict)) { - goto err1; - } - if (!hasRange) { - error(errSyntaxError, -1, "Type 4 function is missing range"); - goto err1; - } - - //----- get the stream - if (!funcObj->isStream()) { - error(errSyntaxError, -1, "Type 4 function isn't a stream"); - goto err1; - } - str = funcObj->getStream(); - - //----- parse the function - codeString = new GString(); - str->reset(); - if (!(tok = getToken(str)) || tok->cmp("{")) { - error(errSyntaxError, -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); - if (codeString) { - delete codeString; - } -} - -void PostScriptFunction::transform(double *in, double *out) { - PSStack *stack; - int i; - - stack = new PSStack(); - 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]; - } - } - // if (!stack->empty()) { - // error(errSyntaxWarning, -1, - // "Extra values on stack at end of PostScript function"); - // } - delete stack; -} - -GBool PostScriptFunction::parseCode(Stream *str, int *codePtr) { - GString *tok; - char *p; - GBool isReal; - int opPtr, elsePtr; - int a, b, mid, cmp; - - while (1) { - if (!(tok = getToken(str))) { - error(errSyntaxError, -1, - "Unexpected end of PostScript function stream"); - return gFalse; - } - p = tok->getCString(); - if (isdigit(*p) || *p == '.' || *p == '-') { - isReal = gFalse; - for (; *p; ++p) { - if (*p == '.') { - isReal = gTrue; - break; - } - } - resizeCode(*codePtr); - if (isReal) { - code[*codePtr].type = psReal; - code[*codePtr].real = atof(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(errSyntaxError, -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(errSyntaxError, -1, - "Unexpected end of PostScript function stream"); - return gFalse; - } - } else { - elsePtr = -1; - } - if (!tok->cmp("if")) { - if (elsePtr >= 0) { - error(errSyntaxError, -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(errSyntaxError, -1, - "Got 'ifelse' operator with one block 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(errSyntaxError, -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(errSyntaxError, -1, - "Unknown operator '{0:t}' in PostScript function", - tok); - delete tok; - return gFalse; - } - delete tok; - resizeCode(*codePtr); - code[*codePtr].type = psOperator; - code[*codePtr].op = (PSOp)a; - ++*codePtr; - } - } - return gTrue; -} - -GString *PostScriptFunction::getToken(Stream *str) { - GString *s; - int c; - GBool comment; - - s = new GString(); - 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; - 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(); - stack->pushReal(atan2(r1, r2)); - 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())); - 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())); - 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(errSyntaxError, -1, - "Internal: bad object in PostScript function code"); - break; - } - } -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Function.h b/thirdparty/xpdf/3.02/src/xpdf/Function.h deleted file mode 100644 index 2d8cc2ff..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Function.h +++ /dev/null @@ -1,231 +0,0 @@ -//======================================================================== -// -// Function.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef FUNCTION_H -#define FUNCTION_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" - -class Dict; -class Stream; -struct PSObject; -class PSStack; - -//------------------------------------------------------------------------ -// 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, int recursion = 0); - - // 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: - - 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 *idxOffset; - double *samples; // the samples - int nSamples; // size of the samples array - double *sBuf; // buffer for the transform function - double cacheIn[funcMaxInputs]; - double cacheOut[funcMaxOutputs]; - 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; - GBool ok; -}; - -//------------------------------------------------------------------------ -// StitchingFunction -//------------------------------------------------------------------------ - -class StitchingFunction: public Function { -public: - - StitchingFunction(Object *funcObj, Dict *dict, int recursion); - 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; } - - GString *getCodeString() { return codeString; } - -private: - - PostScriptFunction(PostScriptFunction *func); - GBool parseCode(Stream *str, int *codePtr); - GString *getToken(Stream *str); - void resizeCode(int newSize); - void exec(PSStack *stack, int codePtr); - - GString *codeString; - PSObject *code; - int codeSize; - GBool ok; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Gfx.cc b/thirdparty/xpdf/3.02/src/xpdf/Gfx.cc deleted file mode 100644 index 4172165d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Gfx.cc +++ /dev/null @@ -1,4576 +0,0 @@ -//======================================================================== -// -// Gfx.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#include "gmem.h" -#include "GString.h" -#include "GList.h" -#include "GlobalParams.h" -#include "CharTypes.h" -#include "Object.h" -#include "PDFDoc.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 "OptionalContent.h" -#include "Error.h" -#include "Gfx.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. -#define gouraudMaxDepth 6 - -// Max delta allowed in any color component for a Gouraud triangle -// shading fill. -#define gouraudColorDelta (dblToCol(1 / 256.0)) - -// 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(1 / 256.0)) - -//------------------------------------------------------------------------ -// Operator table -//------------------------------------------------------------------------ - -#ifdef WIN32 // 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 WIN32 // this works around a bug in the VC7 compiler -# pragma optimize("",on) -#endif - -#define numOps (sizeof(opTab) / sizeof(Operator)) - -//------------------------------------------------------------------------ -// GfxResources -//------------------------------------------------------------------------ - -GfxResources::GfxResources(XRef *xref, Dict *resDict, GfxResources *nextA) { - 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", &propsDict); - - } else { - fonts = NULL; - xObjDict.initNull(); - colorSpaceDict.initNull(); - patternDict.initNull(); - shadingDict.initNull(); - gStateDict.initNull(); - propsDict.initNull(); - } - - next = nextA; -} - -GfxResources::~GfxResources() { - if (fonts) { - delete fonts; - } - xObjDict.free(); - colorSpaceDict.free(); - patternDict.free(); - shadingDict.free(); - gStateDict.free(); - propsDict.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(errSyntaxError, -1, "Unknown font tag '{0: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(errSyntaxError, -1, "XObject '{0: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(errSyntaxError, -1, "XObject '{0: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) { - 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); - obj.free(); - return pattern; - } - obj.free(); - } - } - error(errSyntaxError, -1, "Unknown pattern '{0:s}'", name); - return NULL; -} - -GfxShading *GfxResources::lookupShading(char *name) { - 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); - obj.free(); - return shading; - } - obj.free(); - } - } - error(errSyntaxError, -1, "Unknown shading '{0:s}'", name); - return NULL; -} - -GBool GfxResources::lookupGState(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->gStateDict.isDict()) { - if (!resPtr->gStateDict.dictLookup(name, obj)->isNull()) { - return gTrue; - } - obj->free(); - } - } - error(errSyntaxError, -1, "ExtGState '{0:s}' is unknown", name); - return gFalse; -} - -GBool GfxResources::lookupPropertiesNF(char *name, Object *obj) { - GfxResources *resPtr; - - for (resPtr = this; resPtr; resPtr = resPtr->next) { - if (resPtr->propsDict.isDict()) { - if (!resPtr->propsDict.dictLookupNF(name, obj)->isNull()) { - return gTrue; - } - obj->free(); - } - } - error(errSyntaxError, -1, "Properties '{0:s}' is unknown", name); - return gFalse; -} - -//------------------------------------------------------------------------ -// GfxMarkedContent -//------------------------------------------------------------------------ - -GfxMarkedContent::GfxMarkedContent(GBool ocStateA) { - ocState = ocStateA; -} - -GfxMarkedContent::~GfxMarkedContent() { -} - -//------------------------------------------------------------------------ -// Gfx -//------------------------------------------------------------------------ - -Gfx::Gfx(PDFDoc *docA, OutputDev *outA, int pageNum, Dict *resDict, - double hDPI, double vDPI, PDFRectangle *box, - PDFRectangle *cropBox, int rotate, - GBool (*abortCheckCbkA)(void *data), - void *abortCheckCbkDataA) { - int i; - - doc = docA; - xref = doc->getXRef(); - subPage = gFalse; - printCommands = globalParams->getPrintCommands(); - - // start the resource stack - res = new GfxResources(xref, resDict, NULL); - - // initialize - out = outA; - state = new GfxState(hDPI, vDPI, box, rotate, out->upsideDown()); - 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; - textClipBBoxEmpty = gTrue; - markedContentStack = new GList(); - ocState = gTrue; - 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(PDFDoc *docA, OutputDev *outA, Dict *resDict, - PDFRectangle *box, PDFRectangle *cropBox, - GBool (*abortCheckCbkA)(void *data), - void *abortCheckCbkDataA) { - int i; - - doc = docA; - xref = doc->getXRef(); - subPage = gTrue; - printCommands = globalParams->getPrintCommands(); - - // start the resource stack - res = new GfxResources(xref, resDict, NULL); - - // initialize - out = outA; - state = new GfxState(72, 72, box, 0, gFalse); - fontChanged = gFalse; - clip = clipNone; - ignoreUndef = 0; - for (i = 0; i < 6; ++i) { - baseMatrix[i] = state->getCTM()[i]; - } - formDepth = 0; - textClipBBoxEmpty = gTrue; - markedContentStack = new GList(); - ocState = gTrue; - 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() { - if (!subPage) { - out->endPage(); - } - while (state->hasSaves()) { - restoreState(); - } - delete state; - while (res) { - popResources(); - } - deleteGList(markedContentStack, GfxMarkedContent); -} - -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(errSyntaxError, -1, "Weird page contents"); - obj2.free(); - return; - } - obj2.free(); - } - } else if (!obj->isStream()) { - error(errSyntaxError, -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 - updateLevel = 1; // make sure even empty pages trigger a call to dump() - lastAbortCheck = 0; - numArgs = 0; - parser->getObj(&obj); - while (!obj.isEOF()) { - - // 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); - } - execOp(&obj, args, numArgs); - obj.free(); - for (i = 0; i < numArgs; ++i) - args[i].free(); - numArgs = 0; - - // periodically update display - if (++updateLevel >= 20000) { - out->dump(); - updateLevel = 0; - } - - // 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(errSyntaxError, 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(errSyntaxError, 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(); - } - - // 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(errSyntaxError, getPos(), "Unknown operator '{0:s}'", name); - return; - } - - // type check args - argPtr = args; - if (op->numArgs >= 0) { - if (numArgs < op->numArgs) { - error(errSyntaxError, getPos(), - "Too few ({0:d}) args to '{1:s}' operator", numArgs, name); - return; - } - if (numArgs > op->numArgs) { -#if 0 - error(errSyntaxWarning, getPos(), - "Too many ({0:d}) args to '{1:s}' operator", numArgs, name); -#endif - argPtr += numArgs - op->numArgs; - numArgs = op->numArgs; - } - } else { - if (numArgs > -op->numArgs) { - error(errSyntaxError, getPos(), - "Too many ({0:d}) args to '{1:s}' operator", - numArgs, name); - return; - } - } - for (i = 0; i < numArgs; ++i) { - if (!checkArg(&argPtr[i], op->tchk[i])) { - error(errSyntaxError, getPos(), - "Arg #{0:d} to '{1:s}' operator is wrong type ({2: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; - Object args2[2]; - GfxBlendMode mode; - GBool haveFillOP; - Function *funcs[4]; - GfxColor backdropColor; - GBool haveBackdropColor; - GfxColorSpace *blendingColorSpace; - GBool alpha, isolated, knockout; - double opac; - int i; - - if (!res->lookupGState(args[0].getName(), &obj1)) { - return; - } - if (!obj1.isDict()) { - error(errSyntaxError, getPos(), - "ExtGState '{0:s}' is wrong type", args[0].getName()); - obj1.free(); - return; - } - if (printCommands) { - printf(" gfx state dict: "); - obj1.print(); - printf("\n"); - } - - // parameters that are also set by individual PDF operators - 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() && - obj2.arrayGetLength() == 2) { - obj2.arrayGet(0, &args2[0]); - obj2.arrayGet(1, &args2[1]); - if (args2[0].isArray() && args2[1].isNum()) { - opSetDash(args2, 2); - } - args2[0].free(); - args2[1].free(); - } - obj2.free(); -#if 0 //~ need to add a new version of GfxResources::lookupFont() that - //~ takes an indirect ref instead of a name - if (obj1.dictLookup("Font", &obj2)->isArray() && - obj2.arrayGetLength() == 2) { - obj2.arrayGet(0, &args2[0]); - obj2.arrayGet(1, &args2[1]); - if (args2[0].isDict() && args2[1].isNum()) { - opSetFont(args2, 2); - } - args2[0].free(); - args2[1].free(); - } - obj2.free(); -#endif - if (obj1.dictLookup("FL", &obj2)->isNum()) { - opSetFlat(&obj2, 1); - } - obj2.free(); - - // 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(errSyntaxError, getPos(), "Invalid blend mode in ExtGState"); - } - } - obj2.free(); - if (obj1.dictLookup("ca", &obj2)->isNum()) { - opac = obj2.getNum(); - state->setFillOpacity(opac < 0 ? 0 : opac > 1 ? 1 : opac); - out->updateFillOpacity(state); - } - obj2.free(); - if (obj1.dictLookup("CA", &obj2)->isNum()) { - opac = obj2.getNum(); - state->setStrokeOpacity(opac < 0 ? 0 : opac > 1 ? 1 : opac); - out->updateStrokeOpacity(state); - } - obj2.free(); - - // fill/stroke overprint, overprint mode - 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(errSyntaxError, getPos(), "Invalid transfer function in ExtGState"); - } - 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()) { - if (obj2.isName("Default") || - obj2.isName("Identity")) { - funcs[0] = NULL; - } else { - funcs[0] = Function::parse(&obj3); - if (funcs[0]->getInputSize() != 1 || - funcs[0]->getOutputSize() != 1) { - error(errSyntaxError, getPos(), - "Invalid transfer function in soft mask in ExtGState"); - delete funcs[0]; - funcs[0] = NULL; - } - } - } - 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); - } - 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(errSyntaxError, getPos(), - "Invalid soft mask in ExtGState - missing group"); - } - obj4.free(); - } else { - error(errSyntaxError, getPos(), - "Invalid soft mask in ExtGState - missing group"); - } - obj3.free(); - } else if (!obj2.isNull()) { - error(errSyntaxError, getPos(), "Invalid soft mask in ExtGState"); - } - } - 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(errSyntaxError, getPos(), "Unknown form type"); - } - obj1.free(); - - // get bounding box - dict->lookup("BBox", &obj1); - if (!obj1.isArray()) { - obj1.free(); - error(errSyntaxError, getPos(), "Bad form bounding box"); - return; - } - for (i = 0; i < 4; ++i) { - obj1.arrayGet(i, &obj2); - bbox[i] = obj2.getNum(); - obj2.free(); - } - obj1.free(); - - // get matrix - dict->lookup("Matrix", &obj1); - if (obj1.isArray()) { - for (i = 0; i < 6; ++i) { - obj1.arrayGet(i, &obj2); - m[i] = obj2.getNum(); - 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; - drawForm(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; - - state->setFillPattern(NULL); - state->setFillColorSpace(new GfxDeviceGrayColorSpace()); - out->updateFillColorSpace(state); - color.c[0] = dblToCol(args[0].getNum()); - state->setFillColor(&color); - out->updateFillColor(state); -} - -void Gfx::opSetStrokeGray(Object args[], int numArgs) { - GfxColor color; - - state->setStrokePattern(NULL); - state->setStrokeColorSpace(new GfxDeviceGrayColorSpace()); - 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; - int i; - - state->setFillPattern(NULL); - state->setFillColorSpace(new GfxDeviceCMYKColorSpace()); - out->updateFillColorSpace(state); - for (i = 0; i < 4; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setFillColor(&color); - out->updateFillColor(state); -} - -void Gfx::opSetStrokeCMYKColor(Object args[], int numArgs) { - GfxColor color; - int i; - - state->setStrokePattern(NULL); - state->setStrokeColorSpace(new GfxDeviceCMYKColorSpace()); - 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) { - GfxColor color; - int i; - - state->setFillPattern(NULL); - state->setFillColorSpace(new GfxDeviceRGBColorSpace()); - out->updateFillColorSpace(state); - for (i = 0; i < 3; ++i) { - color.c[i] = dblToCol(args[i].getNum()); - } - state->setFillColor(&color); - out->updateFillColor(state); -} - -void Gfx::opSetStrokeRGBColor(Object args[], int numArgs) { - GfxColor color; - int i; - - state->setStrokePattern(NULL); - state->setStrokeColorSpace(new GfxDeviceRGBColorSpace()); - 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; - - state->setFillPattern(NULL); - res->lookupColorSpace(args[0].getName(), &obj); - if (obj.isNull()) { - colorSpace = GfxColorSpace::parse(&args[0]); - } else { - colorSpace = GfxColorSpace::parse(&obj); - } - obj.free(); - if (colorSpace) { - state->setFillColorSpace(colorSpace); - out->updateFillColorSpace(state); - colorSpace->getDefaultColor(&color); - state->setFillColor(&color); - out->updateFillColor(state); - } else { - error(errSyntaxError, 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]); - } else { - colorSpace = GfxColorSpace::parse(&obj); - } - obj.free(); - if (colorSpace) { - state->setStrokeColorSpace(colorSpace); - out->updateStrokeColorSpace(state); - colorSpace->getDefaultColor(&color); - state->setStrokeColor(&color); - out->updateStrokeColor(state); - } else { - error(errSyntaxError, getPos(), "Bad color space (stroke)"); - } -} - -void Gfx::opSetFillColor(Object args[], int numArgs) { - GfxColor color; - int i; - - if (numArgs != state->getFillColorSpace()->getNComps()) { - error(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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()); - } - } - state->setFillColor(&color); - out->updateFillColor(state); - } - if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName()))) { - state->setFillPattern(pattern); - } - - } else { - if (numArgs != state->getFillColorSpace()->getNComps()) { - error(errSyntaxError, 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()); - } - } - 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(errSyntaxError, 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()); - } - } - state->setStrokeColor(&color); - out->updateStrokeColor(state); - } - if (args[numArgs-1].isName() && - (pattern = res->lookupPattern(args[numArgs-1].getName()))) { - state->setStrokePattern(pattern); - } - - } else { - if (numArgs != state->getStrokeColorSpace()->getNComps()) { - error(errSyntaxError, 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()); - } - } - 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "No path in stroke"); - return; - } - if (state->isPath()) { - if (ocState) { - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - } - doEndPath(); -} - -void Gfx::opCloseStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(errSyntaxError, getPos(), "No path in closepath/stroke"); - return; - } - if (state->isPath()) { - state->closePath(); - if (ocState) { - if (state->getStrokeColorSpace()->getMode() == csPattern) { - doPatternStroke(); - } else { - out->stroke(state); - } - } - } - doEndPath(); -} - -void Gfx::opFill(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(errSyntaxError, getPos(), "No path in fill"); - return; - } - if (state->isPath()) { - if (ocState) { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gFalse); - } else { - out->fill(state); - } - } - } - doEndPath(); -} - -void Gfx::opEOFill(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(errSyntaxError, getPos(), "No path in eofill"); - return; - } - if (state->isPath()) { - if (ocState) { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternFill(gTrue); - } else { - out->eoFill(state); - } - } - } - doEndPath(); -} - -void Gfx::opFillStroke(Object args[], int numArgs) { - if (!state->isCurPt()) { - //error(errSyntaxError, getPos(), "No path in fill/stroke"); - return; - } - if (state->isPath()) { - if (ocState) { - 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(errSyntaxError, getPos(), "No path in closepath/fill/stroke"); - return; - } - if (state->isPath()) { - state->closePath(); - if (ocState) { - 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(errSyntaxError, getPos(), "No path in eofill/stroke"); - return; - } - if (state->isPath()) { - if (ocState) { - 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(errSyntaxError, getPos(), "No path in closepath/eofill/stroke"); - return; - } - if (state->isPath()) { - state->closePath(); - if (ocState) { - 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, gFalse); - break; - case 2: - doShadingPatternFill((GfxShadingPattern *)pattern, gFalse, eoFill, gFalse); - break; - default: - error(errSyntaxError, getPos(), "Unknown pattern type ({0: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, gFalse); - break; - case 2: - doShadingPatternFill((GfxShadingPattern *)pattern, gTrue, gFalse, gFalse); - break; - default: - error(errSyntaxError, getPos(), "Unknown pattern type ({0:d}) in stroke", - pattern->getType()); - break; - } -} - -void Gfx::doPatternText() { - 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, gFalse, gTrue); - break; - case 2: - doShadingPatternFill((GfxShadingPattern *)pattern, gFalse, gFalse, gTrue); - break; - default: - error(errSyntaxError, getPos(), "Unknown pattern type ({0:d}) in fill", - pattern->getType()); - break; - } -} - -void Gfx::doPatternImageMask(Object *ref, Stream *str, int width, int height, - GBool invert, GBool inlineImg) { - saveState(); - - out->setSoftMaskFromImageMask(state, ref, str, - width, height, invert, inlineImg); - - state->clearPath(); - state->moveTo(0, 0); - state->lineTo(1, 0); - state->lineTo(1, 1); - state->lineTo(0, 1); - state->closePath(); - doPatternFill(gTrue); - - restoreState(); -} - -void Gfx::doTilingPatternFill(GfxTilingPattern *tPat, - GBool stroke, GBool eoFill, GBool text) { - GfxPatternColorSpace *patCS; - GfxColorSpace *cs; - GfxState *savedState; - 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 - savedState = saveStateStack(); - - // set underlying color space (for uncolored tiling patterns); set - // various other parameters (stroke color, line width) to match - // Adobe's behavior - state->setFillPattern(NULL); - state->setStrokePattern(NULL); - if (tPat->getPaintType() == 2 && (cs = patCS->getUnder())) { - state->setFillColorSpace(cs->copy()); - out->updateFillColorSpace(state); - state->setStrokeColorSpace(cs->copy()); - out->updateStrokeColorSpace(state); - state->setStrokeColor(state->getFillColor()); - out->updateFillColor(state); - out->updateStrokeColor(state); - } else { - state->setFillColorSpace(new GfxDeviceGrayColorSpace()); - out->updateFillColorSpace(state); - state->setStrokeColorSpace(new GfxDeviceGrayColorSpace()); - out->updateStrokeColorSpace(state); - } - if (!stroke) { - state->setLineWidth(0); - out->updateLineWidth(state); - } - - // clip to current path - if (stroke) { - state->clipToStrokePath(); - out->clipToStrokePath(state); - } else if (!text) { - state->clip(); - if (eoFill) { - out->eoClip(state); - } else { - out->clip(state); - } - } - state->clearPath(); - - // get the clip region, check for empty - state->getClipBBox(&cxMin, &cyMin, &cxMax, &cyMax); - if (cxMin > cxMax || cyMin > cyMax) { - goto err; - } - - // 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 (out->useTilingPatternFill()) { - m1[4] = m[4]; - m1[5] = m[5]; - out->tilingPatternFill(state, this, tPat->getContentStream(), - tPat->getPaintType(), tPat->getResDict(), - m1, tPat->getBBox(), - xi0, yi0, xi1, yi1, xstep, ystep); - } 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]; - drawForm(tPat->getContentStream(), tPat->getResDict(), - m1, tPat->getBBox()); - } - } - } - - // restore graphics state - err: - restoreStateStack(savedState); -} - -void Gfx::doShadingPatternFill(GfxShadingPattern *sPat, - GBool stroke, GBool eoFill, GBool text) { - GfxShading *shading; - GfxState *savedState; - 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 - savedState = saveStateStack(); - - // clip to current path - if (stroke) { - state->clipToStrokePath(); - out->clipToStrokePath(state); - } else if (!text) { - state->clip(); - if (eoFill) { - out->eoClip(state); - } else { - out->clip(state); - } - } - - // 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]); - - // 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); - - // background color fill - if (shading->getHasBackground()) { - state->setFillColor(shading->getBackground()); - out->updateFillColor(state); - state->getUserClipBBox(&xMin, &yMin, &xMax, &yMax); - state->moveTo(xMin, yMin); - state->lineTo(xMax, yMin); - state->lineTo(xMax, yMax); - state->lineTo(xMin, yMax); - state->closePath(); - out->fill(state); - state->clearPath(); - } - -#if 1 //~tmp: turn off anti-aliasing temporarily - out->setInShading(gTrue); -#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 - out->setInShading(gFalse); -#endif - - // restore graphics state - restoreStateStack(savedState); -} - -void Gfx::opShFill(Object args[], int numArgs) { - GfxShading *shading; - GfxState *savedState; - double xMin, yMin, xMax, yMax; - - if (!ocState) { - return; - } - - if (!(shading = res->lookupShading(args[0].getName()))) { - return; - } - - // save current graphics state - savedState = saveStateStack(); - - // 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 - out->setInShading(gTrue); -#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 - out->setInShading(gFalse); -#endif - - // restore graphics state - restoreStateStack(savedState); - - delete shading; -} - -void Gfx::doFunctionShFill(GfxFunctionShading *shading) { - double x0, y0, x1, y1; - GfxColor colors[4]; - - if (out->useShadedFills() && - 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(); - 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); - } -} - -void Gfx::doAxialShFill(GfxAxialShading *shading) { - double xMin, yMin, xMax, yMax; - double x0, y0, x1, y1; - double dx, dy, mul; - GBool dxZero, dyZero; - double tMin, tMax, t, 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, kk; - - if (out->useShadedFills() && - out->axialShadedFill(state, shading)) { - return; - } - - // 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); - 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(); - - // 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); - - // 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; - for (j = 0; j < 3; ++j) { - kk = j; - for (k = j + 1; k < 4; ++k) { - if (s[k] < s[kk]) { - kk = k; - } - } - tmp = s[j]; s[j] = s[kk]; s[kk] = tmp; - } - sMin = s[1]; - sMax = s[2]; - } - ux0 = tx - sMin * dy; - uy0 = ty + sMin * dx; - vx0 = tx - sMax * dy; - vy0 = ty + sMax * dx; - - i = 0; - 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); - for (k = 0; k < nComps; ++k) { - if (abs(color1.c[k] - color0.c[k]) > axialColorDelta) { - break; - } - } - if (k == nComps) { - 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; - for (j = 0; j < 3; ++j) { - kk = j; - for (k = j + 1; k < 4; ++k) { - if (s[k] < s[kk]) { - kk = k; - } - } - tmp = s[j]; s[j] = s[kk]; s[kk] = tmp; - } - 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); - out->updateFillColor(state); - - // fill the region - state->moveTo(ux0, uy0); - state->lineTo(vx0, vy0); - state->lineTo(vx1, vy1); - state->lineTo(ux1, uy1); - state->closePath(); - out->fill(state); - state->clearPath(); - - // set up for next region - ux0 = ux1; - uy0 = uy1; - vx0 = vx1; - vy0 = vy1; - color0 = color1; - i = next[i]; - } -} - -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, sMin, sMax, h; - GBool enclosed; - int ia, ib, k, n; - double *ctm; - double theta, alpha, angle, t; - - if (out->useShadedFills() && - out->radialShadedFill(state, shading)) { - return; - } - - // 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. - h = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); - if (h == 0) { - enclosed = gTrue; - theta = 0; // make gcc happy - sz = 0; // make gcc happy - } else if (r1 - r0 == 0) { - enclosed = gFalse; - theta = 0; - sz = 0; // make gcc happy - } else if (fabs(r1 - r0) >= h) { - enclosed = gTrue; - theta = 0; // make gcc happy - sz = 0; // make gcc happy - } else { - enclosed = gFalse; - sz = -r0 / (r1 - r0); - theta = asin((r1 - r0) / h); - } - 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; - } - } - - // 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); - if (ta < t0) { - shading->getColor(t0, &colorA); - } else if (ta > t1) { - shading->getColor(t1, &colorA); - } else { - shading->getColor(ta, &colorA); - } - - // 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); - if (tb < t0) { - shading->getColor(t0, &colorB); - } else if (tb > t1) { - shading->getColor(t1, &colorB); - } else { - shading->getColor(tb, &colorB); - } - while (ib - ia > 1) { - for (k = 0; k < nComps; ++k) { - if (abs(colorB.c[k] - colorA.c[k]) > radialColorDelta) { - break; - } - } - if (k == nComps && ib < radialMaxSplits) { - break; - } - ib = (ia + ib) / 2; - sb = sMin + ((double)ib / (double)radialMaxSplits) * (sMax - sMin); - tb = t0 + sb * (t1 - t0); - if (tb < t0) { - shading->getColor(t0, &colorB); - } else if (tb > t1) { - shading->getColor(t1, &colorB); - } else { - shading->getColor(tb, &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); - out->updateFillColor(state); - - 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(); - } - - // fill the path - 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 (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(); - 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(); - out->fill(state); - state->clearPath(); - } - } -} - -void Gfx::doGouraudTriangleShFill(GfxGouraudTriangleShading *shading) { - double x0, y0, x1, y1, x2, y2; - GfxColor color0, color1, color2; - int i; - - 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); - } -} - -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) { - 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); - state->moveTo(x0, y0); - state->lineTo(x1, y1); - state->lineTo(x2, y2); - state->closePath(); - out->fill(state); - state->clearPath(); - } 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); - //~ if the shading has a Function, this should interpolate on the - //~ function parameter, not on the color components - 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); - gouraudFillTriangle(x01, y01, &color01, x1, y1, color1, - x12, y12, &color12, nComps, depth + 1); - gouraudFillTriangle(x01, y01, &color01, x12, y12, &color12, - x20, y20, &color20, nComps, depth + 1); - gouraudFillTriangle(x20, y20, &color20, x12, y12, &color12, - x2, y2, color2, nComps, depth + 1); - } -} - -void Gfx::doPatchMeshShFill(GfxPatchMeshShading *shading) { - int start, i; - - if (shading->getNPatches() > 128) { - start = 3; - } else if (shading->getNPatches() > 64) { - start = 2; - } else if (shading->getNPatches() > 16) { - start = 1; - } else { - start = 0; - } - for (i = 0; i < shading->getNPatches(); ++i) { - fillPatch(shading->getPatch(i), shading->getColorSpace()->getNComps(), - start); - } -} - -void Gfx::fillPatch(GfxPatch *patch, int nComps, int depth) { - GfxPatch patch00, patch01, patch10, patch11; - double xx[4][8], yy[4][8]; - double xxm, yym; - int i; - - for (i = 0; i < nComps; ++i) { - if (abs(patch->color[0][0].c[i] - patch->color[0][1].c[i]) - > patchColorDelta || - abs(patch->color[0][1].c[i] - patch->color[1][1].c[i]) - > patchColorDelta || - abs(patch->color[1][1].c[i] - patch->color[1][0].c[i]) - > patchColorDelta || - abs(patch->color[1][0].c[i] - patch->color[0][0].c[i]) - > patchColorDelta) { - break; - } - } - if (i == nComps || depth == patchMaxDepth) { - state->setFillColor(&patch->color[0][0]); - 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(); - 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]; - } - //~ if the shading has a Function, this should interpolate on the - //~ function parameter, not on the color components - for (i = 0; i < nComps; ++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, nComps, depth + 1); - fillPatch(&patch10, nComps, depth + 1); - fillPatch(&patch01, nComps, depth + 1); - fillPatch(&patch11, nComps, depth + 1); - } -} - -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) { - state->setTextMat(1, 0, 0, 1, 0, 0); - state->textMoveTo(0, 0); - out->updateTextMat(state); - out->updateTextPos(state); - fontChanged = gTrue; - textClipBBoxEmpty = gTrue; -} - -void Gfx::opEndText(Object args[], int numArgs) { - out->endTextObject(state); -} - -//------------------------------------------------------------------------ -// 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()))) { - return; - } - if (printCommands) { - printf(" font: tag=%s name='%s' %g\n", - font->getTag()->getCString(), - font->getName() ? font->getName()->getCString() : "???", - args[1].getNum()); - fflush(stdout); - } - 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) { - state->setRender(args[0].getInt()); - 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(errSyntaxError, getPos(), "No font in show"); - return; - } - if (fontChanged) { - out->updateFont(state); - fontChanged = gFalse; - } - if (ocState) { - out->beginStringOp(state); - doShowText(args[0].getString()); - out->endStringOp(state); - } else { - doIncCharCount(args[0].getString()); - } -} - -void Gfx::opMoveShowText(Object args[], int numArgs) { - double tx, ty; - - if (!state->getFont()) { - error(errSyntaxError, 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); - if (ocState) { - out->beginStringOp(state); - doShowText(args[0].getString()); - out->endStringOp(state); - } else { - doIncCharCount(args[0].getString()); - } -} - -void Gfx::opMoveSetShowText(Object args[], int numArgs) { - double tx, ty; - - if (!state->getFont()) { - error(errSyntaxError, 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); - if (ocState) { - out->beginStringOp(state); - doShowText(args[2].getString()); - out->endStringOp(state); - } else { - doIncCharCount(args[2].getString()); - } -} - -void Gfx::opShowSpaceText(Object args[], int numArgs) { - Array *a; - Object obj; - int wMode; - int i; - - if (!state->getFont()) { - error(errSyntaxError, getPos(), "No font in show/space"); - return; - } - if (fontChanged) { - out->updateFont(state); - fontChanged = gFalse; - } - if (ocState) { - 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()) { - if (wMode) { - state->textShift(0, -obj.getNum() * 0.001 * - state->getFontSize()); - } else { - state->textShift(-obj.getNum() * 0.001 * - state->getFontSize() * - state->getHorizScaling(), 0); - } - out->updateTextShift(state, obj.getNum()); - } else if (obj.isString()) { - doShowText(obj.getString()); - } else { - error(errSyntaxError, getPos(), - "Element of show/space array must be number or string"); - } - obj.free(); - } - out->endStringOp(state); - } else { - a = args[0].getArray(); - for (i = 0; i < a->getLength(); ++i) { - a->get(i, &obj); - if (obj.isString()) { - doIncCharCount(obj.getString()); - } - obj.free(); - } - } -} - -void Gfx::doShowText(GString *s) { - GfxFont *font; - int wMode; - double riseX, riseY; - CharCode code; - Unicode u[8]; - double x, y, dx, dy, dx2, dy2, curX, curY, tdx, tdy; - double originX, originY, tOriginX, tOriginY; - double x0, y0, x1, y1; - double oldCTM[6], newCTM[6]; - double *mat; - Object charProc; - Dict *resDict; - Parser *oldParser; - GfxState *savedState; - char *p; - int render; - GBool patternFill; - int len, n, uLen, nChars, nSpaces, i; - - font = state->getFont(); - wMode = font->getWMode(); - - if (out->useDrawChar()) { - out->beginString(state, s); - } - - // if we're doing a pattern fill, set up clipping - render = state->getRender(); - if (!(render & 1) && - state->getFillColorSpace()->getMode() == csPattern) { - patternFill = gTrue; - saveState(); - // disable fill, enable clipping, leave stroke unchanged - if ((render ^ (render >> 1)) & 1) { - render = 5; - } else { - render = 7; - } - state->setRender(render); - out->updateRender(state); - } else { - patternFill = gFalse; - } - - state->textTransformDelta(0, state->getRise(), &riseX, &riseY); - x0 = state->getCurX() + riseX; - y0 = state->getCurY() + riseY; - - // 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(); - curX = state->getCurX(); - curY = state->getCurY(); - oldParser = parser; - p = s->getCString(); - len = s->getLength(); - while (len > 0) { - n = font->getNextChar(p, len, &code, - u, (int)(sizeof(u) / sizeof(Unicode)), &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); - savedState = saveStateStack(); - 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(errSyntaxError, getPos(), - "Missing or bad Type3 CharProc entry"); - } - out->endType3Char(state); - if (resDict) { - popResources(); - } - charProc.free(); - } - restoreStateStack(savedState); - curX += tdx; - curY += tdy; - state->moveTo(curX, curY); - p += n; - len -= n; - } - parser = oldParser; - - } else if (out->useDrawChar()) { - p = s->getCString(); - len = s->getLength(); - while (len > 0) { - n = font->getNextChar(p, len, &code, - u, (int)(sizeof(u) / sizeof(Unicode)), &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); - 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, (int)(sizeof(u) / sizeof(Unicode)), &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); - out->drawString(state, s); - state->shift(tdx, tdy); - } - - if (out->useDrawChar()) { - out->endString(state); - } - - if (patternFill) { - out->saveTextPos(state); - // tell the OutputDev to do the clipping - out->endTextObject(state); - // set up a clipping bbox so doPatternText will work -- assume - // that the text bounding box does not extend past the baseline in - // any direction by more than the font size - x1 = state->getCurX() + riseX; - y1 = state->getCurY() + riseY; - if (x0 > x1) { - x = x0; x0 = x1; x1 = x; - } - if (y0 > y1) { - y = y0; y0 = y1; y1 = y; - } - state->textTransformDelta(0, state->getFontSize(), &dx, &dy); - state->textTransformDelta(state->getFontSize(), 0, &dx2, &dy2); - dx = fabs(dx); - dx2 = fabs(dx2); - if (dx2 > dx) { - dx = dx2; - } - dy = fabs(dy); - dy2 = fabs(dy2); - if (dy2 > dy) { - dy = dy2; - } - state->clipToRect(x0 - dx, y0 - dy, x1 + dx, y1 + dy); - // set render mode to fill-only - state->setRender(0); - out->updateRender(state); - doPatternText(); - restoreState(); - out->restoreTextPos(state); - } - - updateLevel += 10 * s->getLength(); -} - -// NB: this is only called when ocState is false. -void Gfx::doIncCharCount(GString *s) { - if (out->needCharCount()) { - out->incCharCount(s->getLength()); - } -} - -//------------------------------------------------------------------------ -// XObject operators -//------------------------------------------------------------------------ - -void Gfx::opXObject(Object args[], int numArgs) { - char *name; - Object obj1, obj2, obj3, refObj; -#if OPI_SUPPORT - Object opiDict; -#endif - - if (!ocState && !out->needCharCount()) { - return; - } - name = args[0].getName(); - if (!res->lookupXObject(name, &obj1)) { - return; - } - if (!obj1.isStream()) { - error(errSyntaxError, getPos(), "XObject '{0:s}' is wrong type", name); - obj1.free(); - return; - } -#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(errSyntaxError, getPos(), - "Unknown XObject subtype '{0:s}'", obj2.getName()); - } else { - error(errSyntaxError, 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; - 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; - Stream *maskStr; - Object obj1, obj2; - int i, n; - - // 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()) - goto err2; - width = obj1.getInt(); - obj1.free(); - dict->lookup("Height", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("H", &obj1); - } - if (!obj1.isInt()) - goto err2; - height = obj1.getInt(); - obj1.free(); - - // 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); - invert = obj2.isNum() && obj2.getNum() == 1; - obj2.free(); - } else if (!obj1.isNull()) { - goto err2; - } - obj1.free(); - - // if drawing is disabled, skip over inline image data - if (!ocState) { - str->reset(); - n = height * ((width + 7) / 8); - for (i = 0; i < n; ++i) { - str->getChar(); - } - str->close(); - - // draw it - } else { - if (state->getFillColorSpace()->getMode() == csPattern) { - doPatternImageMask(ref, str, width, height, invert, inlineImg); - } else { - out->drawImageMask(state, ref, str, width, height, invert, inlineImg); - } - } - - } else { - - // get color space and color map - dict->lookup("ColorSpace", &obj1); - if (obj1.isNull()) { - obj1.free(); - dict->lookup("CS", &obj1); - } - if (obj1.isName()) { - res->lookupColorSpace(obj1.getName(), &obj2); - if (!obj2.isNull()) { - obj1.free(); - obj1 = obj2; - } else { - obj2.free(); - } - } - if (!obj1.isNull()) { - colorSpace = GfxColorSpace::parse(&obj1); - } else if (csMode == streamCSDeviceGray) { - colorSpace = new GfxDeviceGrayColorSpace(); - } else if (csMode == streamCSDeviceRGB) { - colorSpace = new GfxDeviceRGBColorSpace(); - } else if (csMode == streamCSDeviceCMYK) { - colorSpace = new GfxDeviceCMYKColorSpace(); - } 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("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); - 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 - haveColorKeyMask = gTrue; - for (i = 0; - i+1 < maskObj.arrayGetLength() && i+1 < 2*gfxColorMaxComps; - i += 2) { - maskObj.arrayGet(i, &obj1); - if (!obj1.isInt()) { - obj1.free(); - haveColorKeyMask = gFalse; - break; - } - maskColors[i] = obj1.getInt(); - obj1.free(); - if (maskColors[i] < 0 || maskColors[i] >= (1 << bits)) { - haveColorKeyMask = gFalse; - break; - } - maskObj.arrayGet(i+1, &obj1); - if (!obj1.isInt()) { - obj1.free(); - haveColorKeyMask = gFalse; - break; - } - maskColors[i+1] = obj1.getInt(); - obj1.free(); - if (maskColors[i+1] < 0 || maskColors[i+1] >= (1 << bits) || - maskColors[i] > maskColors[i+1]) { - haveColorKeyMask = gFalse; - break; - } - } - } 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("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); - maskInvert = obj2.isNum() && obj2.getNum() == 1; - obj2.free(); - } else if (!obj1.isNull()) { - goto err2; - } - obj1.free(); - haveExplicitMask = gTrue; - } - - // if drawing is disabled, skip over inline image data - if (!ocState) { - str->reset(); - n = height * ((width * colorMap->getNumPixelComps() * - colorMap->getBits() + 7) / 8); - for (i = 0; i < n; ++i) { - str->getChar(); - } - str->close(); - - // draw it - } else { - if (haveSoftMask) { - out->drawSoftMaskedImage(state, ref, str, width, height, colorMap, - maskStr, maskWidth, maskHeight, maskColorMap); - delete maskColorMap; - } else if (haveExplicitMask) { - out->drawMaskedImage(state, ref, str, width, height, colorMap, - maskStr, maskWidth, maskHeight, maskInvert); - } else { - out->drawImage(state, ref, str, width, height, colorMap, - 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(errSyntaxError, 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; - GBool oc, ocSaved; - Object obj1, obj2, obj3; - int i; - - // check for excessive recursion - if (formDepth > 100) { - return; - } - - // get stream dict - dict = str->streamGetDict(); - - // check form type - dict->lookup("FormType", &obj1); - if (!(obj1.isNull() || (obj1.isInt() && obj1.getInt() == 1))) { - error(errSyntaxError, getPos(), "Unknown form type"); - } - obj1.free(); - - // check for optional content key - ocSaved = ocState; - dict->lookupNF("OC", &obj1); - if (doc->getOptionalContent()->evalOCObject(&obj1, &oc) && !oc) { - obj1.free(); - if (out->needCharCount()) { - ocState = gFalse; - } else { - return; - } - } - obj1.free(); - - // get bounding box - dict->lookup("BBox", &bboxObj); - if (!bboxObj.isArray()) { - bboxObj.free(); - error(errSyntaxError, getPos(), "Bad form bounding box"); - ocState = ocSaved; - 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; - - // 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); - } - 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; - drawForm(str, resDict, m, bbox, - transpGroup, gFalse, blendingColorSpace, isolated, knockout); - --formDepth; - - if (blendingColorSpace) { - delete blendingColorSpace; - } - resObj.free(); - - ocState = ocSaved; -} - -void Gfx::drawForm(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; - GfxState *savedState; - double oldBaseMatrix[6]; - int i; - - // push new resources on stack - pushResources(resDict); - - // save current graphics state - savedState = saveStateStack(); - - // 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]; - } - - // draw the form - display(str, gFalse); - - 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 - restoreStateStack(savedState); - - // 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; - - // NB: this function is run even if ocState is false -- doImage() is - // responsible for skipping over the inline image data - - // 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(errSyntaxError, 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(errSyntaxError, getPos(), "End of file in inline image"); - obj.free(); - dict.free(); - return NULL; - } - obj.free(); - - // make stream - if (!(str = parser->getStream())) { - error(errSyntaxError, getPos(), "Invalid inline image data"); - dict.free(); - return NULL; - } - str = new EmbedStream(str, &dict, gFalse, 0); - str = str->addFilters(&dict); - - return str; -} - -void Gfx::opImageData(Object args[], int numArgs) { - error(errInternal, getPos(), "Got 'ID' operator"); -} - -void Gfx::opEndImage(Object args[], int numArgs) { - error(errInternal, getPos(), "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 -//------------------------------------------------------------------------ - -void Gfx::opBeginMarkedContent(Object args[], int numArgs) { - GfxMarkedContent *mc; - Object obj; - GBool ocStateNew; - - if (printCommands) { - printf(" marked content: %s ", args[0].getName()); - if (numArgs == 2) { - args[1].print(stdout); - } - printf("\n"); - fflush(stdout); - } - if (args[0].isName("OC") && numArgs == 2 && args[1].isName() && - res->lookupPropertiesNF(args[1].getName(), &obj)) { - if (doc->getOptionalContent()->evalOCObject(&obj, &ocStateNew)) { - ocState = ocStateNew; - } - obj.free(); - } - mc = new GfxMarkedContent(ocState); - markedContentStack->append(mc); -} - -void Gfx::opEndMarkedContent(Object args[], int numArgs) { - GfxMarkedContent *mc; - - if (markedContentStack->getLength() > 0) { - mc = (GfxMarkedContent *) - markedContentStack->del(markedContentStack->getLength() - 1); - delete mc; - if (markedContentStack->getLength() > 0) { - mc = (GfxMarkedContent *) - markedContentStack->get(markedContentStack->getLength() - 1); - ocState = mc->ocState; - } else { - ocState = gTrue; - } - } else { - error(errSyntaxWarning, getPos(), "Mismatched EMC operator"); - } -} - -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); - } -} - -//------------------------------------------------------------------------ -// misc -//------------------------------------------------------------------------ - -void Gfx::drawAnnot(Object *str, AnnotBorderStyle *borderStyle, - double xMin, double yMin, double xMax, double yMax) { - Dict *dict, *resDict; - Object matrixObj, bboxObj, resObj, obj1; - double formXMin, formYMin, formXMax, formYMax; - double x, y, sx, sy, tx, ty; - double m[6], bbox[4]; - double r, g, b; - GfxColor color; - double *dash, *dash2; - int dashLength; - int i; - - // this function assumes that we are in the default user space, - // i.e., baseMatrix = ctm - - // if the bounding box has zero width or height, don't draw anything - // at all - if (xMin == xMax || yMin == yMax) { - return; - } - - // 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(errSyntaxError, getPos(), "Bad form bounding box"); - return; - } - for (i = 0; i < 4; ++i) { - bboxObj.arrayGet(i, &obj1); - bbox[i] = obj1.getNum(); - obj1.free(); - } - bboxObj.free(); - - // get the form 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(); - - // transform the four corners of the form bbox to default user - // space, and construct the transformed bbox - x = bbox[0] * m[0] + bbox[1] * m[2] + m[4]; - y = bbox[0] * m[1] + bbox[1] * m[3] + m[5]; - formXMin = formXMax = x; - formYMin = formYMax = y; - x = bbox[0] * m[0] + bbox[3] * m[2] + m[4]; - y = bbox[0] * m[1] + bbox[3] * m[3] + m[5]; - if (x < formXMin) { - formXMin = x; - } else if (x > formXMax) { - formXMax = x; - } - if (y < formYMin) { - formYMin = y; - } else if (y > formYMax) { - formYMax = y; - } - x = bbox[2] * m[0] + bbox[1] * m[2] + m[4]; - y = bbox[2] * m[1] + bbox[1] * m[3] + m[5]; - if (x < formXMin) { - formXMin = x; - } else if (x > formXMax) { - formXMax = x; - } - if (y < formYMin) { - formYMin = y; - } else if (y > formYMax) { - formYMax = y; - } - x = bbox[2] * m[0] + bbox[3] * m[2] + m[4]; - y = bbox[2] * m[1] + bbox[3] * m[3] + m[5]; - if (x < formXMin) { - formXMin = x; - } else if (x > formXMax) { - formXMax = x; - } - if (y < formYMin) { - formYMin = y; - } else if (y > formYMax) { - formYMax = y; - } - - // construct a mapping matrix, [sx 0 0], which maps the transformed - // [0 sy 0] - // [tx ty 1] - // bbox to the annotation rectangle - if (formXMin == formXMax) { - // this shouldn't happen - sx = 1; - } else { - sx = (xMax - xMin) / (formXMax - formXMin); - } - if (formYMin == formYMax) { - // this shouldn't happen - sy = 1; - } else { - sy = (yMax - yMin) / (formYMax - formYMin); - } - tx = -formXMin * sx + xMin; - ty = -formYMin * sy + yMin; - - // the final transform matrix is (form matrix) * (mapping matrix) - m[0] *= sx; - m[1] *= sy; - m[2] *= sx; - m[3] *= sy; - m[4] = m[4] * sx + tx; - m[5] = m[5] * sy + ty; - - // get the resources - dict->lookup("Resources", &resObj); - resDict = resObj.isDict() ? resObj.getDict() : (Dict *)NULL; - - // draw it - drawForm(str, resDict, m, bbox); - - resObj.free(); - } - - // draw the border - if (borderStyle && borderStyle->getWidth() > 0) { - if (state->getStrokeColorSpace()->getMode() != csDeviceRGB) { - state->setStrokePattern(NULL); - state->setStrokeColorSpace(new GfxDeviceRGBColorSpace()); - out->updateStrokeColorSpace(state); - } - borderStyle->getColor(&r, &g, &b); - color.c[0] = dblToCol(r); - color.c[1] = dblToCol(g); - color.c[2] = dblToCol(b); - state->setStrokeColor(&color); - out->updateStrokeColor(state); - state->setLineWidth(borderStyle->getWidth()); - out->updateLineWidth(state); - borderStyle->getDash(&dash, &dashLength); - if (borderStyle->getType() == annotBorderDashed && dashLength > 0) { - dash2 = (double *)gmallocn(dashLength, sizeof(double)); - memcpy(dash2, dash, dashLength * sizeof(double)); - state->setLineDash(dash2, dashLength, 0); - out->updateLineDash(state); - } - //~ this doesn't currently handle the beveled and engraved styles - state->clearPath(); - state->moveTo(xMin, yMin); - state->lineTo(xMax, yMin); - if (borderStyle->getType() != annotBorderUnderlined) { - state->lineTo(xMax, yMax); - state->lineTo(xMin, yMax); - state->closePath(); - } - out->stroke(state); - } -} - -void Gfx::saveState() { - out->saveState(state); - state = state->save(); -} - -void Gfx::restoreState() { - state = state->restore(); - out->restoreState(state); -} - -// Create a new state stack, and initialize it with a copy of the -// current state. -GfxState *Gfx::saveStateStack() { - GfxState *oldState; - - out->saveState(state); - oldState = state; - state = state->copy(gTrue); - return oldState; -} - -// Switch back to the previous state stack. -void Gfx::restoreStateStack(GfxState *oldState) { - while (state->hasSaves()) { - restoreState(); - } - delete state; - state = oldState; - out->restoreState(state); -} - -void Gfx::pushResources(Dict *resDict) { - res = new GfxResources(xref, resDict, res); -} - -void Gfx::popResources() { - GfxResources *resPtr; - - resPtr = res->getNext(); - delete res; - res = resPtr; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Gfx.h b/thirdparty/xpdf/3.02/src/xpdf/Gfx.h deleted file mode 100644 index df833573..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Gfx.h +++ /dev/null @@ -1,344 +0,0 @@ -//======================================================================== -// -// Gfx.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GFX_H -#define GFX_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" - -class GString; -class GList; -class PDFDoc; -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 AnnotBorderStyle; - -//------------------------------------------------------------------------ - -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); - void lookupColorSpace(char *name, Object *obj); - GfxPattern *lookupPattern(char *name); - GfxShading *lookupShading(char *name); - GBool lookupGState(char *name, Object *obj); - GBool lookupPropertiesNF(char *name, Object *obj); - - GfxResources *getNext() { return next; } - -private: - - GfxFontDict *fonts; - Object xObjDict; - Object colorSpaceDict; - Object patternDict; - Object shadingDict; - Object gStateDict; - Object propsDict; - GfxResources *next; -}; - -//------------------------------------------------------------------------ -// GfxMarkedContent -//------------------------------------------------------------------------ - -class GfxMarkedContent { -public: - - GfxMarkedContent(GBool ocStateA); - ~GfxMarkedContent(); - - GBool ocState; // true if drawing is enabled, false if - // disabled -}; - -//------------------------------------------------------------------------ -// Gfx -//------------------------------------------------------------------------ - -class Gfx { -public: - - // Constructor for regular output. - Gfx(PDFDoc *docA, OutputDev *outA, int pageNum, Dict *resDict, - 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(PDFDoc *docA, OutputDev *outA, Dict *resDict, - 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, AnnotBorderStyle *borderStyle, - double xMin, double yMin, double xMax, double yMax); - - // Save graphics state. - void saveState(); - - // Restore graphics state. - void restoreState(); - - // Get the current graphics state object. - GfxState *getState() { return state; } - - void drawForm(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); - -private: - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - OutputDev *out; // output device - GBool subPage; // is this a sub-page object? - GBool printCommands; // print the drawing commands (for debugging) - GfxResources *res; // resource stack - int updateLevel; - - GfxState *state; // current graphics state - 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; - double textClipBBox[4]; // text clipping bounding box - GBool textClipBBoxEmpty; // true if textClipBBox has not been - // initialized yet - GBool ocState; // true if drawing is enabled, false if - // disabled - GList *markedContentStack; // BMC/BDC/EMC stack [GfxMarkedContent] - - Parser *parser; // parser for page content stream(s) - - 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(); - - // 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 doPatternText(); - void doPatternImageMask(Object *ref, Stream *str, int width, int height, - GBool invert, GBool inlineImg); - void doTilingPatternFill(GfxTilingPattern *tPat, - GBool stroke, GBool eoFill, GBool text); - void doShadingPatternFill(GfxShadingPattern *sPat, - GBool stroke, GBool eoFill, GBool text); - 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); - void doPatchMeshShFill(GfxPatchMeshShading *shading); - void fillPatch(GfxPatch *patch, int nComps, int depth); - 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(GString *s); - void doIncCharCount(GString *s); - - // XObject operators - void opXObject(Object args[], int numArgs); - void doImage(Object *ref, Stream *str, GBool inlineImg); - void doForm(Object *str); - - // 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); - - GfxState *saveStateStack(); - void restoreStateStack(GfxState *oldState); - void pushResources(Dict *resDict); - void popResources(); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/GfxFont.cc b/thirdparty/xpdf/3.02/src/xpdf/GfxFont.cc deleted file mode 100644 index 841c2878..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/GfxFont.cc +++ /dev/null @@ -1,1707 +0,0 @@ -//======================================================================== -// -// GfxFont.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#include -#include "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 "FoFiIdentifier.h" -#include "FoFiType1.h" -#include "FoFiType1C.h" -#include "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 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 readFromStream(void *data) { - return ((Stream *)data)->getChar(); -} - -//------------------------------------------------------------------------ -// GfxFont -//------------------------------------------------------------------------ - -GfxFont *GfxFont::makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict) { - GString *nameA; - GfxFont *font; - Object obj1; - - // get base font name - nameA = NULL; - fontDict->lookup("BaseFont", &obj1); - if (obj1.isName()) { - nameA = new GString(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(errSyntaxError, -1, "Unknown font type: '{0:s}'", - obj1.isName() ? obj1.getName() : "???"); - font = new Gfx8BitFont(xref, tagA, idA, nameA, fontUnknownType, fontDict); - } - obj1.free(); - - return font; -} - -GfxFont::GfxFont(char *tagA, Ref idA, GString *nameA) { - ok = gFalse; - tag = new GString(tagA); - id = idA; - name = nameA; - origName = nameA; - embFontName = NULL; - extFontFile = NULL; -} - -GfxFont::~GfxFont() { - delete tag; - if (origName && origName != name) { - delete origName; - } - if (name) { - delete name; - } - if (embFontName) { - delete embFontName; - } - if (extFontFile) { - delete extFontFile; - } -} - -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 GString(obj2.getName()); - } - obj2.free(); - - // look for embedded font file - if (obj1.dictLookupNF("FontFile", &obj2)->isRef()) { - embFontID = obj2.getRef(); - if (type != fontType1) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = isCIDFont() ? fontCIDType0 : fontType1; - } - } - obj2.free(); - if (embFontID.num == -1 && - obj1.dictLookupNF("FontFile2", &obj2)->isRef()) { - embFontID = obj2.getRef(); - if (type != fontTrueType && type != fontCIDType2) { - error(errSyntaxWarning, -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(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = isCIDFont() ? fontCIDType0 : fontType1; - } - } else if (obj4.isName("Type1C")) { - embFontID = obj2.getRef(); - if (type == fontType1 || type == fontType1C) { - type = fontType1C; - } else { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = isCIDFont() ? fontCIDType0C : fontType1C; - } - } else if (obj4.isName("TrueType")) { - embFontID = obj2.getRef(); - if (type != fontTrueType) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = isCIDFont() ? fontCIDType2 : fontTrueType; - } - } else if (obj4.isName("CIDFontType0C")) { - embFontID = obj2.getRef(); - if (type == fontCIDType0) { - type = fontCIDType0C; - } else { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = isCIDFont() ? fontCIDType0C : 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(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - } - } else { - error(errSyntaxError, -1, "Unknown embedded font type '{0: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) { - GString *buf; - Object obj1; - int c; - - if (!fontDict->lookup("ToUnicode", &obj1)->isStream()) { - obj1.free(); - return NULL; - } - buf = new GString(); - obj1.streamReset(); - while ((c = obj1.streamGetChar()) != EOF) { - buf->append(c); - } - obj1.streamClose(); - obj1.free(); - if (ctu) { - ctu->mergeCMap(buf, nBits); - } else { - ctu = CharCodeToUnicode::parseCMap(buf, nBits); - } - delete buf; - return ctu; -} - -void GfxFont::findExtFontFile() { - static char *type1Exts[] = { ".pfa", ".pfb", ".ps", "", NULL }; - static char *ttExts[] = { ".ttf", 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(errIO, -1, - "External font file '{0:t}' vanished", extFontFile); - return NULL; - } - fseek(f, 0, SEEK_END); - *len = (int)ftell(f); - fseek(f, 0, SEEK_SET); - buf = (char *)gmalloc(*len); - if ((int)fread(buf, 1, *len, f) != *len) { - error(errIO, -1, "Error reading external font file '{0:t}'", extFontFile); - } - fclose(f); - return buf; -} - -char *GfxFont::readEmbFontFile(XRef *xref, int *len) { - char *buf; - Object obj1, obj2; - Stream *str; - int c; - int size, i; - - obj1.initRef(embFontID.num, embFontID.gen); - obj1.fetch(xref, &obj2); - if (!obj2.isStream()) { - error(errSyntaxError, -1, "Embedded font file is not a stream"); - obj2.free(); - obj1.free(); - embFontID.num = -1; - return NULL; - } - str = obj2.getStream(); - - buf = NULL; - i = size = 0; - str->reset(); - while ((c = str->getChar()) != EOF) { - if (i == size) { - if (size > INT_MAX - 4096) { - error(errSyntaxError, -1, "Embedded font file is too large"); - break; - } - size += 4096; - buf = (char *)grealloc(buf, size); - } - buf[i++] = c; - } - *len = i; - str->close(); - - obj2.free(); - obj1.free(); - - return buf; -} - -//------------------------------------------------------------------------ -// Gfx8BitFont -//------------------------------------------------------------------------ - -Gfx8BitFont::Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GString *nameA, - GfxFontType typeA, Dict *fontDict): - GfxFont(tagA, idA, nameA) -{ - GString *name2; - BuiltinFont *builtinFont; - char **baseEnc; - GBool baseEncFromFontFile; - FoFiIdentifierType t; - char *buf; - int len; - FoFiType1 *ffT1; - FoFiType1C *ffT1C; - int code, code2; - 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; - - 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 GString(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); - - // check the embedded font file type - if (embFontID.num >= 0) { - obj1.initRef(embFontID.num, embFontID.gen); - obj1.fetch(xref, &obj2); - if (obj2.isStream()) { - obj2.streamReset(); - t = FoFiIdentifier::identifyStream(&readFromStream, obj2.getStream()); - obj2.streamClose(); - switch (t) { - case fofiIdType1PFA: - case fofiIdType1PFB: - if (type != fontType1) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontType1; - } - break; - case fofiIdCFF8Bit: - if (type != fontType1C) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontType1C; - } - break; - case fofiIdTrueType: - case fofiIdTrueTypeCollection: - if (type != fontTrueType) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontTrueType; - } - break; - case fofiIdOpenTypeCFF8Bit: - if (type != fontType1COT) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontType1COT; - } - break; - default: - error(errSyntaxWarning, -1, "Embedded font file may be invalid"); - break; - } - } - obj2.free(); - } - obj1.free(); - - // 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(errSyntaxError, -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 { - if ((buf = readEmbFontFile(xref, &len))) { - ffT1 = FoFiType1::make(buf, len); - } - } - if (ffT1) { - if (ffT1->getName()) { - if (embFontName) { - delete embFontName; - } - embFontName = new GString(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 { - if ((buf = readEmbFontFile(xref, &len))) { - ffT1C = FoFiType1C::make(buf, len); - } - } - if (ffT1C) { - if (ffT1C->getName()) { - if (embFontName) { - delete embFontName; - } - embFontName = new GString(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(errSyntaxError, -1, - "Wrong type in font encoding resource differences ({0: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; - } - } - - // pass 2: try to fill in the missing chars, looking for names of - // any of the following forms: - // - 'xx' - // - 'Axx' - // - 'nn' - // - 'Ann' - // - 'ABnn' - // - 'unixxxx' - // where 'A' and 'B' are any letters, 'xx' is two hex digits, 'xxxx' - // is four hex digits, and 'nn' is 2-4 decimal digits - if (missing && globalParams->getMapNumericCharNames()) { - for (code = 0; code < 256; ++code) { - if ((charName = enc[code]) && !toUnicode[code] && - strcmp(charName, ".notdef")) { - n = strlen(charName); - code2 = -1; - if (hex && n == 3 && isalpha(charName[0]) && - isxdigit(charName[1]) && isxdigit(charName[2])) { - sscanf(charName+1, "%x", &code2); - } else if (hex && n == 2 && - isxdigit(charName[0]) && isxdigit(charName[1])) { - sscanf(charName, "%x", &code2); - } else if (!hex && n >= 2 && n <= 4 && - isdigit(charName[0]) && isdigit(charName[1])) { - code2 = atoi(charName); - } else if (n >= 3 && n <= 5 && - isdigit(charName[1]) && isdigit(charName[2])) { - code2 = atoi(charName+1); - } else if (n >= 4 && n <= 6 && - isdigit(charName[2]) && isdigit(charName[3])) { - code2 = atoi(charName+2); - } else if (n == 7 && charName[0] == 'u' && charName[1] == 'n' && - charName[2] == 'i' && - isxdigit(charName[3]) && isxdigit(charName[4]) && - isxdigit(charName[5]) && isxdigit(charName[6])) { - sscanf(charName + 3, "%x", &code2); - } - if (code2 >= 0 && code2 <= 0xffff) { - toUnicode[code] = (Unicode)code2; - } - } - } - - // if the 'mapUnknownCharNames' flag is set, do a simple pass-through - // mapping for unknown character names - } else if (missing && globalParams->getMapUnknownCharNames()) { - for (code = 0; code < 256; ++code) { - if (!toUnicode[code]) { - toUnicode[code] = code; - } - } - } - - // construct the char code -> Unicode mapping object - ctu = CharCodeToUnicode::make8BitToUnicode(toUnicode); - - // 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))) { - for (i = 0; i < 256; ++i) { - toUnicode[i] = 0; - } - ctu2 = CharCodeToUnicode::make8BitToUnicode(toUnicode); - for (i = 0; i < 256; ++i) { - n = ctu->mapToUnicode((CharCode)i, uBuf, 8); - if (n >= 1) { - n = utu->mapToUnicode((CharCode)uBuf[0], uBuf, 8); - if (n >= 1) { - ctu2->setMapping((CharCode)i, uBuf, 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 (fabs(widths[code] - widths[firstChar]) > 0.00001) { - 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(); - } -} - -int Gfx8BitFont::getNextChar(char *s, int len, CharCode *code, - Unicode *u, int uSize, int *uLen, - double *dx, double *dy, double *ox, double *oy) { - CharCode c; - - *code = c = (CharCode)(*s & 0xff); - *uLen = ctu->mapToUnicode(c, u, uSize); - *dx = widths[c]; - *dy = *ox = *oy = 0; - return 1; -} - -CharCodeToUnicode *Gfx8BitFont::getToUnicode() { - ctu->incRefCnt(); - return ctu; -} - -int *Gfx8BitFont::getCodeToGIDMap(FoFiTrueType *ff) { - int *map; - int cmapPlatform, cmapEncoding; - int unicodeCmap, macRomanCmap, msSymbolCmap, cmap; - GBool useMacRoman, useUnicode; - char *charName; - Unicode u; - int code, i, n; - - map = (int *)gmallocn(256, sizeof(int)); - 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 PDF font is not symbolic or the PDF font is not - // embedded, and 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) { - if (usesMacRomanEnc && macRomanCmap >= 0) { - cmap = macRomanCmap; - useMacRoman = gTrue; - } else if ((!(flags & fontSymbolic) || embFontID.num < 0) && - 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); - } - } else { - map[i] = -1; - } - } - - // map Unicode through the cmap - } else if (useUnicode) { - for (i = 0; i < 256; ++i) { - if (((charName = enc[i]) && - (u = globalParams->mapNameToUnicode(charName))) || - (n = ctu->mapToUnicode((CharCode)i, &u, 1))) { - map[i] = ff->mapCodeToGID(cmap, u); - } else { - map[i] = -1; - } - } - - // 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] <= 0 && (charName = enc[i])) { - map[i] = 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 int CDECL cmpWidthExcep(const void *w1, const void *w2) { - return ((GfxFontCIDWidthExcep *)w1)->first - - ((GfxFontCIDWidthExcep *)w2)->first; -} - -static int CDECL cmpWidthExcepV(const void *w1, const void *w2) { - return ((GfxFontCIDWidthExcepV *)w1)->first - - ((GfxFontCIDWidthExcepV *)w2)->first; -} - -GfxCIDFont::GfxCIDFont(XRef *xref, char *tagA, Ref idA, GString *nameA, - Dict *fontDict): - GfxFont(tagA, idA, nameA) -{ - Dict *desFontDict; - GString *collection; - Object desFontDictObj; - FoFiIdentifierType t; - Object obj1, obj2, obj3, obj4, obj5, obj6; - CharCodeToUnicode *utu; - CharCode c; - Unicode uBuf[8]; - int c1, c2; - int excepsSize, i, j, k, n; - - ascent = 0.95; - descent = -0.35; - fontBBox[0] = fontBBox[1] = fontBBox[2] = fontBBox[3] = 0; - cMap = NULL; - ctu = NULL; - ctuUsesCharCode = gTrue; - 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(errSyntaxError, -1, "Missing DescendantFonts entry in Type 0 font"); - obj1.free(); - goto err1; - } - if (!obj1.arrayGet(0, &desFontDictObj)->isDict()) { - error(errSyntaxError, -1, "Bad descendant font in Type 0 font"); - goto err2; - } - obj1.free(); - desFontDict = desFontDictObj.getDict(); - - // font type - if (!desFontDict->lookup("Subtype", &obj1)) { - error(errSyntaxError, -1, - "Missing Subtype entry in Type 0 descendant font"); - goto err2; - } - if (obj1.isName("CIDFontType0")) { - type = fontCIDType0; - } else if (obj1.isName("CIDFontType2")) { - type = fontCIDType2; - } else { - error(errSyntaxError, -1, "Unknown Type 0 descendant font type '{0:s}'", - obj1.isName() ? obj1.getName() : "???"); - goto err2; - } - obj1.free(); - - // get info from font descriptor - readFontDescriptor(xref, desFontDict); - - // check the embedded font file type - if (embFontID.num >= 0) { - obj1.initRef(embFontID.num, embFontID.gen); - obj1.fetch(xref, &obj2); - if (obj2.isStream()) { - obj2.streamReset(); - t = FoFiIdentifier::identifyStream(&readFromStream, obj2.getStream()); - obj2.streamClose(); - switch (t) { - case fofiIdCFF8Bit: - case fofiIdCFFCID: - if (type != fontCIDType0C) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontCIDType0C; - } - break; - case fofiIdTrueType: - case fofiIdTrueTypeCollection: - if (type != fontCIDType2 && type != fontCIDType2OT) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontCIDType2; - } - break; - case fofiIdOpenTypeCFF8Bit: - case fofiIdOpenTypeCFFCID: - if (type != fontCIDType0COT) { - error(errSyntaxWarning, -1, - "Mismatch between font type and embedded font file"); - type = fontCIDType0COT; - } - break; - default: - error(errSyntaxWarning, -1, "Embedded font file may be invalid"); - break; - } - } - obj2.free(); - } - obj1.free(); - - // look for an external font file - findExtFontFile(); - - //----- encoding info ----- - - // char collection - if (!desFontDict->lookup("CIDSystemInfo", &obj1)->isDict()) { - error(errSyntaxError, -1, - "Missing CIDSystemInfo dictionary in Type 0 descendant font"); - goto err2; - } - obj1.dictLookup("Registry", &obj2); - obj1.dictLookup("Ordering", &obj3); - if (!obj2.isString() || !obj3.isString()) { - error(errSyntaxError, -1, - "Invalid CIDSystemInfo dictionary in Type 0 descendant font"); - goto err3; - } - 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))) { - ctuUsesCharCode = gFalse; - - // use an identity mapping for the "Adobe-Identity" and - // "Adobe-UCS" collections - if (!collection->cmp("Adobe-Identity") || - !collection->cmp("Adobe-UCS")) { - ctu = CharCodeToUnicode::makeIdentityMapping(); - - // look for a user-supplied .cidToUnicode file - } else if (!(ctu = globalParams->getCIDToUnicode(collection))) { - error(errSyntaxError, -1, - "Unknown character collection '{0:t}'", collection); - } - } - - // 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, 8); - if (n >= 1) { - n = utu->mapToUnicode((CharCode)uBuf[0], uBuf, 8); - if (n >= 1) { - ctu->setMapping(c, uBuf, n); - } - } - } - utu->decRefCnt(); - } else { - ctu = utu; - } - } - - // encoding (i.e., CMap) - if (fontDict->lookup("Encoding", &obj1)->isNull()) { - error(errSyntaxError, -1, "Missing Encoding entry in Type 0 font"); - delete collection; - goto err2; - } - if (!(cMap = CMap::parse(NULL, collection, &obj1))) { - delete collection; - goto err2; - } - obj1.free(); - delete collection; - - // CIDToGIDMap - // (the PDF spec only allows these for TrueType fonts, but Acrobat - // apparently also allows them for OpenType CFF fonts) - if (type == fontCIDType2 || type == fontCIDType0COT) { - desFontDict->lookup("CIDToGIDMap", &obj1); - if (obj1.isStream()) { - cidToGIDLen = 0; - i = 64; - cidToGID = (int *)gmallocn(i, sizeof(int)); - obj1.streamReset(); - while ((c1 = obj1.streamGetChar()) != EOF && - (c2 = obj1.streamGetChar()) != EOF) { - if (cidToGIDLen == i) { - i *= 2; - cidToGID = (int *)greallocn(cidToGID, i, sizeof(int)); - } - cidToGID[cidToGIDLen++] = (c1 << 8) + c2; - } - } else if (!obj1.isName("Identity") && !obj1.isNull()) { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -1, "Bad widths array in Type 0 font"); - } - obj4.free(); - } - i += 2; - } else { - error(errSyntaxError, -1, "Bad widths array in Type 0 font"); - ++i; - } - obj3.free(); - obj2.free(); - } - qsort(widths.exceps, widths.nExceps, sizeof(GfxFontCIDWidthExcep), - &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(errSyntaxError, -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(errSyntaxError, -1, "Bad widths (W2) array in Type 0 font"); - } - obj6.free(); - obj5.free(); - obj4.free(); - } - i += 2; - } else { - error(errSyntaxError, -1, "Bad widths (W2) array in Type 0 font"); - ++i; - } - obj3.free(); - obj2.free(); - } - qsort(widths.excepsV, widths.nExcepsV, sizeof(GfxFontCIDWidthExcepV), - &cmpWidthExcepV); - } - obj1.free(); - - desFontDictObj.free(); - ok = gTrue; - return; - - err3: - obj3.free(); - obj2.free(); - err2: - obj1.free(); - 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 uSize, int *uLen, - double *dx, double *dy, double *ox, double *oy) { - CID cid; - CharCode c; - 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, &c, &n)); - if (ctu) { - *uLen = ctu->mapToUnicode(ctuUsesCharCode ? c : cid, u, uSize); - } else { - *uLen = 0; - } - if (!*uLen && uSize >= 1 && globalParams->getMapUnknownCharNames()) { - u[0] = *code; - *uLen = 1; - } - - // 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; -} - -GString *GfxCIDFont::getCollection() { - return cMap ? cMap->getCollection() : (GString *)NULL; -} - -//------------------------------------------------------------------------ -// 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()) { - delete fonts[i]; - fonts[i] = NULL; - } - } else { - error(errSyntaxError, -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]) { - delete fonts[i]; - } - } - 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/thirdparty/xpdf/3.02/src/xpdf/GfxFont.h b/thirdparty/xpdf/3.02/src/xpdf/GfxFont.h deleted file mode 100644 index 35ce88e7..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/GfxFont.h +++ /dev/null @@ -1,322 +0,0 @@ -//======================================================================== -// -// GfxFont.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GFXFONT_H -#define GFXFONT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "GString.h" -#include "Object.h" -#include "CharTypes.h" - -class Dict; -class CMap; -class CharCodeToUnicode; -class FoFiTrueType; -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 .. - double width; // char width -}; - -struct GfxFontCIDWidthExcepV { - CID first; // this record applies to - CID last; // CIDs .. - 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: - - // Build a GfxFont object. - static GfxFont *makeFont(XRef *xref, char *tagA, Ref idA, Dict *fontDict); - - GfxFont(char *tagA, Ref idA, GString *nameA); - - virtual ~GfxFont(); - - GBool isOk() { return ok; } - - // Get font tag. - GString *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. - GString *getName() { return name; } - - // Get the original font name (ignornig any munging that might have - // been done to map to a canonical Base-14 font name). - GString *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. - GString *getEmbeddedFontName() { return embFontName; } - - // Get the name of the external font file. Returns NULL if there - // is no external font file. - GString *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 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 of bytes, returning the - // char , its Unicode mapping , its displacement vector - // (, ), and its origin offset vector (, ). - // is the number of entries available in , and 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 uSize, int *uLen, - double *dx, double *dy, double *ox, double *oy) = 0; - -protected: - - void readFontDescriptor(XRef *xref, Dict *fontDict); - CharCodeToUnicode *readToUnicodeCMap(Dict *fontDict, int nBits, - CharCodeToUnicode *ctu); - void findExtFontFile(); - - GString *tag; // PDF font tag - Ref id; // reference (used as unique ID) - GString *name; // font name - GString *origName; // original font name - GfxFontType type; // type of font - int flags; // font descriptor flags - GString *embFontName; // name of embedded font - Ref embFontID; // ref to embedded font file stream - GString *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 - GBool ok; -}; - -//------------------------------------------------------------------------ -// Gfx8BitFont -//------------------------------------------------------------------------ - -class Gfx8BitFont: public GfxFont { -public: - - Gfx8BitFont(XRef *xref, char *tagA, Ref idA, GString *nameA, - GfxFontType typeA, Dict *fontDict); - - virtual ~Gfx8BitFont(); - - virtual int getNextChar(char *s, int len, CharCode *code, - Unicode *u, int uSize, 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 . - 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.) - int *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 . - Object *getCharProc(int code, Object *proc); - - // Return the Type 3 Resources dictionary, or NULL if none. - Dict *getResources(); - -private: - - 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, GString *nameA, - Dict *fontDict); - - virtual ~GfxCIDFont(); - - virtual GBool isCIDFont() { return gTrue; } - - virtual int getNextChar(char *s, int len, CharCode *code, - Unicode *u, int uSize, 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 (-). - GString *getCollection(); - - // Return the CID-to-GID mapping table. These should only be called - // if type is fontCIDType2. - int *getCIDToGID() { return cidToGID; } - int getCIDToGIDLen() { return cidToGIDLen; } - -private: - - CMap *cMap; // char code --> CID - CharCodeToUnicode *ctu; // CID/char code --> Unicode - GBool ctuUsesCharCode; // true: ctu maps char code to Unicode; - // false: ctu maps CID to Unicode - GfxFontCIDWidths widths; // character widths - int *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/thirdparty/xpdf/3.02/src/xpdf/GfxState.cc b/thirdparty/xpdf/3.02/src/xpdf/GfxState.cc deleted file mode 100644 index 2cd1ca5e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/GfxState.cc +++ /dev/null @@ -1,4306 +0,0 @@ -//======================================================================== -// -// GfxState.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "gmem.h" -#include "Error.h" -#include "Object.h" -#include "Array.h" -#include "Page.h" -#include "GfxState.h" - -//------------------------------------------------------------------------ - -// Max depth of nested color spaces. This is used to catch infinite -// loops in the color space object structure. -#define colorSpaceRecursionLimit 8 - - -//------------------------------------------------------------------------ - -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; -} - -//------------------------------------------------------------------------ - -struct GfxBlendModeInfo { - char *name; - GfxBlendMode mode; -}; - -static 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 *))) - - -//------------------------------------------------------------------------ -// GfxColorSpace -//------------------------------------------------------------------------ - -GfxColorSpace::GfxColorSpace() { - overprintMask = 0x0f; -} - -GfxColorSpace::~GfxColorSpace() { -} - -GfxColorSpace *GfxColorSpace::parse(Object *csObj, int recursion) { - GfxColorSpace *cs; - Object obj1; - - if (recursion > colorSpaceRecursionLimit) { - error(errSyntaxError, -1, "Loop detected in color space objects"); - return NULL; - } - 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(errSyntaxError, -1, "Bad color space '{0: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(), recursion); - } else if (obj1.isName("CalRGB")) { - cs = GfxCalRGBColorSpace::parse(csObj->getArray(), recursion); - } else if (obj1.isName("Lab")) { - cs = GfxLabColorSpace::parse(csObj->getArray(), recursion); - } else if (obj1.isName("ICCBased")) { - cs = GfxICCBasedColorSpace::parse(csObj->getArray(), recursion); - } else if (obj1.isName("Indexed") || obj1.isName("I")) { - cs = GfxIndexedColorSpace::parse(csObj->getArray(), recursion); - } else if (obj1.isName("Separation")) { - cs = GfxSeparationColorSpace::parse(csObj->getArray(), recursion); - } else if (obj1.isName("DeviceN")) { - cs = GfxDeviceNColorSpace::parse(csObj->getArray(), recursion); - } else if (obj1.isName("Pattern")) { - cs = GfxPatternColorSpace::parse(csObj->getArray(), recursion); - } else { - error(errSyntaxError, -1, "Bad color space"); - } - obj1.free(); - } else { - error(errSyntaxError, -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]; -} - -//------------------------------------------------------------------------ -// 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::getRGB(GfxColor *color, GfxRGB *rgb) { - rgb->r = rgb->g = rgb->b = clip01(color->c[0]); -} - -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; -} - -GfxColorSpace *GfxCalGrayColorSpace::parse(Array *arr, int recursion) { - GfxCalGrayColorSpace *cs; - Object obj1, obj2, obj3; - - arr->get(1, &obj1); - if (!obj1.isDict()) { - error(errSyntaxError, -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); - 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("Gamma", &obj2)->isNum()) { - cs->gamma = obj2.getNum(); - } - obj2.free(); - obj1.free(); - return cs; -} - -void GfxCalGrayColorSpace::getGray(GfxColor *color, GfxGray *gray) { - *gray = clip01(color->c[0]); -} - -void GfxCalGrayColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - rgb->r = rgb->g = rgb->b = clip01(color->c[0]); -} - -void GfxCalGrayColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - cmyk->c = cmyk->m = cmyk->y = 0; - cmyk->k = clip01(gfxColorComp1 - color->c[0]); -} - - -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::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::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, int recursion) { - GfxCalRGBColorSpace *cs; - Object obj1, obj2, obj3; - int i; - - arr->get(1, &obj1); - if (!obj1.isDict()) { - error(errSyntaxError, -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); - 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("Gamma", &obj2)->isArray() && - obj2.arrayGetLength() == 3) { - obj2.arrayGet(0, &obj3); - cs->gammaR = obj3.getNum(); - obj3.free(); - obj2.arrayGet(1, &obj3); - cs->gammaG = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2, &obj3); - 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); - cs->mat[i] = obj3.getNum(); - obj3.free(); - } - } - obj2.free(); - obj1.free(); - return cs; -} - -void GfxCalRGBColorSpace::getGray(GfxColor *color, GfxGray *gray) { - *gray = clip01((GfxColorComp)(0.299 * color->c[0] + - 0.587 * color->c[1] + - 0.114 * color->c[2] + 0.5)); -} - -void GfxCalRGBColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - rgb->r = clip01(color->c[0]); - rgb->g = clip01(color->c[1]); - rgb->b = clip01(color->c[2]); -} - -void GfxCalRGBColorSpace::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 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, x; - - 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; - // 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; - rgb->r = clip01(dblToCol(r)); - rgb->g = clip01(dblToCol(g)); - rgb->b = clip01(dblToCol(b)); -} - -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 -//------------------------------------------------------------------------ - -// This is the inverse of MatrixLMN in Example 4.10 from the PostScript -// Language Reference, Third Edition. -static double xyzrgb[3][3] = { - { 3.240449, -1.537136, -0.498531 }, - { -0.969265, 1.876011, 0.041556 }, - { 0.055643, -0.204026, 1.057229 } -}; - -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, int recursion) { - GfxLabColorSpace *cs; - Object obj1, obj2, obj3; - - arr->get(1, &obj1); - if (!obj1.isDict()) { - error(errSyntaxError, -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; - - getRGB(color, &rgb); - *gray = clip01((GfxColorComp)(0.299 * rgb.r + - 0.587 * rgb.g + - 0.114 * rgb.b + 0.5)); -} - -void GfxLabColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - double X, Y, Z; - double t1, t2; - double r, g, b; - - // convert L*a*b* to CIE 1931 XYZ color space - 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)); - } - X *= whiteX; - if (t1 >= (6.0 / 29.0)) { - Y = t1 * t1 * t1; - } else { - Y = (108.0 / 841.0) * (t1 - (4.0 / 29.0)); - } - Y *= whiteY; - 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)); - } - 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(pow(clip01(r * kr), 0.5)); - rgb->g = dblToCol(pow(clip01(g * kg), 0.5)); - rgb->b = dblToCol(pow(clip01(b * kb), 0.5)); -} - -void GfxLabColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - 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; -} - - -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 -//------------------------------------------------------------------------ - -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; -} - -GfxICCBasedColorSpace::~GfxICCBasedColorSpace() { - delete alt; -} - -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]; - } - return cs; -} - -GfxColorSpace *GfxICCBasedColorSpace::parse(Array *arr, int recursion) { - 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(); - arr->get(1, &obj1); - if (!obj1.isStream()) { - error(errSyntaxError, -1, "Bad ICCBased color space (stream)"); - obj1.free(); - return NULL; - } - dict = obj1.streamGetDict(); - if (!dict->lookup("N", &obj2)->isInt()) { - error(errSyntaxError, -1, "Bad ICCBased color space (N)"); - obj2.free(); - obj1.free(); - return NULL; - } - nCompsA = obj2.getInt(); - obj2.free(); - if (nCompsA > 4) { - error(errSyntaxError, -1, - "ICCBased color space with too many ({0:d} > 4) components", - nCompsA); - nCompsA = 4; - } - if (dict->lookup("Alternate", &obj2)->isNull() || - !(altA = GfxColorSpace::parse(&obj2, recursion + 1))) { - switch (nCompsA) { - case 1: - altA = new GfxDeviceGrayColorSpace(); - break; - case 3: - altA = new GfxDeviceRGBColorSpace(); - break; - case 4: - altA = new GfxDeviceCMYKColorSpace(); - break; - default: - error(errSyntaxError, -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) { - for (i = 0; i < nCompsA; ++i) { - obj2.arrayGet(2*i, &obj3); - cs->rangeMin[i] = obj3.getNum(); - obj3.free(); - obj2.arrayGet(2*i+1, &obj3); - cs->rangeMax[i] = obj3.getNum(); - obj3.free(); - } - } - obj2.free(); - obj1.free(); - return cs; -} - -void GfxICCBasedColorSpace::getGray(GfxColor *color, GfxGray *gray) { - alt->getGray(color, gray); -} - -void GfxICCBasedColorSpace::getRGB(GfxColor *color, GfxRGB *rgb) { - alt->getRGB(color, rgb); -} - -void GfxICCBasedColorSpace::getCMYK(GfxColor *color, GfxCMYK *cmyk) { - alt->getCMYK(color, cmyk); -} - - -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, int recursion) { - GfxIndexedColorSpace *cs; - GfxColorSpace *baseA; - int indexHighA; - Object obj1; - int x; - char *s; - int n, i, j; - - if (arr->getLength() != 4) { - error(errSyntaxError, -1, "Bad Indexed color space"); - goto err1; - } - arr->get(1, &obj1); - if (!(baseA = GfxColorSpace::parse(&obj1, recursion + 1))) { - error(errSyntaxError, -1, "Bad Indexed color space (base color space)"); - goto err2; - } - obj1.free(); - if (!arr->get(2, &obj1)->isInt()) { - error(errSyntaxError, -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 - error(errSyntaxError, -1, - "Bad Indexed color space (invalid indexHigh value)"); - delete baseA; - goto err2; - } - 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) { - for (j = 0; j < n; ++j) { - if ((x = obj1.streamGetChar()) == EOF) { - error(errSyntaxError, -1, - "Bad Indexed color space (lookup table stream too short)"); - goto err3; - } - cs->lookup[i*n + j] = (Guchar)x; - } - } - obj1.streamClose(); - } else if (obj1.isString()) { - if (obj1.getString()->getLength() < (indexHighA + 1) * n) { - error(errSyntaxError, -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(errSyntaxError, -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::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(GString *nameA, - GfxColorSpace *altA, - Function *funcA) { - name = nameA; - alt = altA; - func = funcA; - nonMarking = !name->cmp("None"); - if (!name->cmp("Cyan")) { - overprintMask = 0x01; - } else if (!name->cmp("Magenta")) { - overprintMask = 0x02; - } else if (!name->cmp("Yellow")) { - overprintMask = 0x04; - } else if (!name->cmp("Black")) { - overprintMask = 0x08; - } -} - -GfxSeparationColorSpace::GfxSeparationColorSpace(GString *nameA, - GfxColorSpace *altA, - Function *funcA, - GBool nonMarkingA, - Guint overprintMaskA) { - name = nameA; - alt = altA; - func = funcA; - nonMarking = nonMarkingA; - overprintMask = overprintMaskA; -} - -GfxSeparationColorSpace::~GfxSeparationColorSpace() { - delete name; - delete alt; - delete func; -} - -GfxColorSpace *GfxSeparationColorSpace::copy() { - return new GfxSeparationColorSpace(name->copy(), alt->copy(), func->copy(), - nonMarking, overprintMask); -} - -//~ handle the 'All' and 'None' colorants -GfxColorSpace *GfxSeparationColorSpace::parse(Array *arr, int recursion) { - GfxSeparationColorSpace *cs; - GString *nameA; - GfxColorSpace *altA; - Function *funcA; - Object obj1; - - if (arr->getLength() != 4) { - error(errSyntaxError, -1, "Bad Separation color space"); - goto err1; - } - if (!arr->get(1, &obj1)->isName()) { - error(errSyntaxError, -1, "Bad Separation color space (name)"); - goto err2; - } - nameA = new GString(obj1.getName()); - obj1.free(); - arr->get(2, &obj1); - if (!(altA = GfxColorSpace::parse(&obj1, recursion + 1))) { - error(errSyntaxError, -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, - GString **namesA, - GfxColorSpace *altA, - Function *funcA) { - int i; - - nComps = nCompsA; - alt = altA; - func = funcA; - nonMarking = gTrue; - overprintMask = 0; - for (i = 0; i < nComps; ++i) { - names[i] = namesA[i]; - if (names[i]->cmp("None")) { - nonMarking = gFalse; - } - if (!names[i]->cmp("Cyan")) { - overprintMask |= 0x01; - } else if (!names[i]->cmp("Magenta")) { - overprintMask |= 0x02; - } else if (!names[i]->cmp("Yellow")) { - overprintMask |= 0x04; - } else if (!names[i]->cmp("Black")) { - overprintMask |= 0x08; - } else { - overprintMask = 0x0f; - } - } -} - -GfxDeviceNColorSpace::GfxDeviceNColorSpace(int nCompsA, - GString **namesA, - GfxColorSpace *altA, - Function *funcA, - GBool nonMarkingA, - Guint overprintMaskA) { - int i; - - nComps = nCompsA; - alt = altA; - func = funcA; - nonMarking = nonMarkingA; - overprintMask = overprintMaskA; - for (i = 0; i < nComps; ++i) { - names[i] = namesA[i]->copy(); - } -} - -GfxDeviceNColorSpace::~GfxDeviceNColorSpace() { - int i; - - for (i = 0; i < nComps; ++i) { - delete names[i]; - } - delete alt; - delete func; -} - -GfxColorSpace *GfxDeviceNColorSpace::copy() { - return new GfxDeviceNColorSpace(nComps, names, alt->copy(), func->copy(), - nonMarking, overprintMask); -} - -//~ handle the 'None' colorant -GfxColorSpace *GfxDeviceNColorSpace::parse(Array *arr, int recursion) { - GfxDeviceNColorSpace *cs; - int nCompsA; - GString *namesA[gfxColorMaxComps]; - GfxColorSpace *altA; - Function *funcA; - Object obj1, obj2; - int i; - - if (arr->getLength() != 4 && arr->getLength() != 5) { - error(errSyntaxError, -1, "Bad DeviceN color space"); - goto err1; - } - if (!arr->get(1, &obj1)->isArray()) { - error(errSyntaxError, -1, "Bad DeviceN color space (names)"); - goto err2; - } - nCompsA = obj1.arrayGetLength(); - if (nCompsA > gfxColorMaxComps) { - error(errSyntaxError, -1, - "DeviceN color space with too many ({0:d} > {1:d}) components", - nCompsA, gfxColorMaxComps); - nCompsA = gfxColorMaxComps; - } - for (i = 0; i < nCompsA; ++i) { - if (!obj1.arrayGet(i, &obj2)->isName()) { - error(errSyntaxError, -1, "Bad DeviceN color space (names)"); - obj2.free(); - goto err2; - } - namesA[i] = new GString(obj2.getName()); - obj2.free(); - } - obj1.free(); - arr->get(2, &obj1); - if (!(altA = GfxColorSpace::parse(&obj1, recursion + 1))) { - error(errSyntaxError, -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, namesA, altA, funcA); - 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, int recursion) { - GfxPatternColorSpace *cs; - GfxColorSpace *underA; - Object obj1; - - if (arr->getLength() != 1 && arr->getLength() != 2) { - error(errSyntaxError, -1, "Bad Pattern color space"); - return NULL; - } - underA = NULL; - if (arr->getLength() == 2) { - arr->get(1, &obj1); - if (!(underA = GfxColorSpace::parse(&obj1, recursion + 1))) { - error(errSyntaxError, -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) { - // not used -} - -//------------------------------------------------------------------------ -// Pattern -//------------------------------------------------------------------------ - -GfxPattern::GfxPattern(int typeA) { - type = typeA; -} - -GfxPattern::~GfxPattern() { -} - -GfxPattern *GfxPattern::parse(Object *obj) { - 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); - } - 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(errSyntaxWarning, -1, "Invalid or missing PaintType in pattern"); - } - obj1.free(); - if (dict->lookup("TilingType", &obj1)->isInt()) { - tilingTypeA = obj1.getInt(); - } else { - tilingTypeA = 1; - error(errSyntaxWarning, -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(errSyntaxError, -1, "Invalid or missing BBox in pattern"); - } - obj1.free(); - if (dict->lookup("XStep", &obj1)->isNum()) { - xStepA = obj1.getNum(); - } else { - xStepA = 1; - error(errSyntaxError, -1, "Invalid or missing XStep in pattern"); - } - obj1.free(); - if (dict->lookup("YStep", &obj1)->isNum()) { - yStepA = obj1.getNum(); - } else { - yStepA = 1; - error(errSyntaxError, -1, "Invalid or missing YStep in pattern"); - } - obj1.free(); - if (!dict->lookup("Resources", &resDictA)->isDict()) { - resDictA.free(); - resDictA.initNull(); - error(errSyntaxError, -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) { - 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); - 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) { - 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(errSyntaxError, -1, "Invalid ShadingType in shading dictionary"); - obj1.free(); - return NULL; - } - typeA = obj1.getInt(); - obj1.free(); - - switch (typeA) { - case 1: - shading = GfxFunctionShading::parse(dict); - break; - case 2: - shading = GfxAxialShading::parse(dict); - break; - case 3: - shading = GfxRadialShading::parse(dict); - break; - case 4: - if (obj->isStream()) { - shading = GfxGouraudTriangleShading::parse(4, dict, obj->getStream()); - } else { - error(errSyntaxError, -1, "Invalid Type 4 shading object"); - goto err1; - } - break; - case 5: - if (obj->isStream()) { - shading = GfxGouraudTriangleShading::parse(5, dict, obj->getStream()); - } else { - error(errSyntaxError, -1, "Invalid Type 5 shading object"); - goto err1; - } - break; - case 6: - if (obj->isStream()) { - shading = GfxPatchMeshShading::parse(6, dict, obj->getStream()); - } else { - error(errSyntaxError, -1, "Invalid Type 6 shading object"); - goto err1; - } - break; - case 7: - if (obj->isStream()) { - shading = GfxPatchMeshShading::parse(7, dict, obj->getStream()); - } else { - error(errSyntaxError, -1, "Invalid Type 7 shading object"); - goto err1; - } - break; - default: - error(errSyntaxError, -1, "Unknown shading type {0:d}", typeA); - goto err1; - } - - return shading; - - err1: - return NULL; -} - -GBool GfxShading::init(Dict *dict) { - Object obj1, obj2; - int i; - - dict->lookup("ColorSpace", &obj1); - if (!(colorSpace = GfxColorSpace::parse(&obj1))) { - error(errSyntaxError, -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(errSyntaxError, -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) { - hasBBox = gTrue; - xMin = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - yMin = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - xMax = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - yMax = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - } else { - error(errSyntaxError, -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) { - 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(); - y0A = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - x1A = 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(errSyntaxError, -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)) { - 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]); - } -} - -//------------------------------------------------------------------------ -// GfxAxialShading -//------------------------------------------------------------------------ - -GfxAxialShading::GfxAxialShading(double x0A, double y0A, - double x1A, double y1A, - double t0A, double t1A, - Function **funcsA, int nFuncsA, - GBool extend0A, GBool extend1A): - GfxShading(2) -{ - int i; - - x0 = x0A; - y0 = y0A; - x1 = x1A; - y1 = y1A; - t0 = t0A; - t1 = t1A; - nFuncs = nFuncsA; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = funcsA[i]; - } - extend0 = extend0A; - extend1 = extend1A; -} - -GfxAxialShading::GfxAxialShading(GfxAxialShading *shading): - GfxShading(shading) -{ - int i; - - x0 = shading->x0; - y0 = shading->y0; - x1 = shading->x1; - y1 = shading->y1; - 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; -} - -GfxAxialShading::~GfxAxialShading() { - int i; - - for (i = 0; i < nFuncs; ++i) { - delete funcs[i]; - } -} - -GfxAxialShading *GfxAxialShading::parse(Dict *dict) { - 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) { - x0A = obj1.arrayGet(0, &obj2)->getNum(); - obj2.free(); - y0A = obj1.arrayGet(1, &obj2)->getNum(); - obj2.free(); - x1A = obj1.arrayGet(2, &obj2)->getNum(); - obj2.free(); - y1A = obj1.arrayGet(3, &obj2)->getNum(); - obj2.free(); - } else { - error(errSyntaxError, -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(errSyntaxError, -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)) { - delete shading; - return NULL; - } - return shading; - - err1: - return NULL; -} - -GfxShading *GfxAxialShading::copy() { - return new GfxAxialShading(this); -} - -void GfxAxialShading::getColor(double t, GfxColor *color) { - double out[gfxColorMaxComps]; - int i; - - // NB: there can be one function with n outputs or n functions with - // one output each (where n = number of color components) - for (i = 0; i < gfxColorMaxComps; ++i) { - out[i] = 0; - } - for (i = 0; i < nFuncs; ++i) { - funcs[i]->transform(&t, &out[i]); - } - for (i = 0; i < gfxColorMaxComps; ++i) { - color->c[i] = dblToCol(out[i]); - } -} - -//------------------------------------------------------------------------ -// GfxRadialShading -//------------------------------------------------------------------------ - -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): - GfxShading(3) -{ - int i; - - x0 = x0A; - y0 = y0A; - r0 = r0A; - x1 = x1A; - y1 = y1A; - r1 = r1A; - t0 = t0A; - t1 = t1A; - nFuncs = nFuncsA; - for (i = 0; i < nFuncs; ++i) { - funcs[i] = funcsA[i]; - } - extend0 = extend0A; - extend1 = extend1A; -} - -GfxRadialShading::GfxRadialShading(GfxRadialShading *shading): - GfxShading(shading) -{ - int i; - - x0 = shading->x0; - y0 = shading->y0; - r0 = shading->r0; - x1 = shading->x1; - y1 = shading->y1; - r1 = shading->r1; - 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; -} - -GfxRadialShading::~GfxRadialShading() { - int i; - - for (i = 0; i < nFuncs; ++i) { - delete funcs[i]; - } -} - -GfxRadialShading *GfxRadialShading::parse(Dict *dict) { - 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(errSyntaxError, -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(errSyntaxError, -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)) { - delete shading; - return NULL; - } - return shading; - - err1: - return NULL; -} - -GfxShading *GfxRadialShading::copy() { - return new GfxRadialShading(this); -} - -void GfxRadialShading::getColor(double t, GfxColor *color) { - double out[gfxColorMaxComps]; - int i; - - // NB: there can be one function with n outputs or n functions with - // one output each (where n = number of color components) - for (i = 0; i < gfxColorMaxComps; ++i) { - out[i] = 0; - } - for (i = 0; i < nFuncs; ++i) { - funcs[i]->transform(&t, &out[i]); - } - for (i = 0; i < gfxColorMaxComps; ++i) { - color->c[i] = dblToCol(out[i]); - } -} - -//------------------------------------------------------------------------ -// 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) { - 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(errSyntaxError, -1, - "Missing or invalid BitsPerCoordinate in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("BitsPerComponent", &obj1)->isInt()) { - compBits = obj1.getInt(); - } else { - error(errSyntaxError, -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(errSyntaxError, -1, - "Missing or invalid BitsPerFlag in shading dictionary"); - goto err2; - } - obj1.free(); - } else { - if (dict->lookup("VerticesPerRow", &obj1)->isInt()) { - vertsPerRow = obj1.getInt(); - } else { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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) { - vertSize = (vertSize == 0) ? 16 : 2 * vertSize; - verticesA = (GfxGouraudVertex *) - greallocn(verticesA, vertSize, 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)) { - 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; - - 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; - } -} - -//------------------------------------------------------------------------ -// 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) { - 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; - GfxColorComp c[4][gfxColorMaxComps]; - Guint ci; - GfxShadingBitBuf *bitBuf; - Object obj1, obj2; - int i, j; - - if (dict->lookup("BitsPerCoordinate", &obj1)->isInt()) { - coordBits = obj1.getInt(); - } else { - error(errSyntaxError, -1, - "Missing or invalid BitsPerCoordinate in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("BitsPerComponent", &obj1)->isInt()) { - compBits = obj1.getInt(); - } else { - error(errSyntaxError, -1, - "Missing or invalid BitsPerComponent in shading dictionary"); - goto err2; - } - obj1.free(); - if (dict->lookup("BitsPerFlag", &obj1)->isInt()) { - flagBits = obj1.getInt(); - } else { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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)) { - break; - } - c[i][j] = dblToCol(cMin[j] + cMul[j] * (double)ci); - } - if (j < nComps) { - break; - } - } - if (i < nColors) { - break; - } - if (nPatchesA == patchesSize) { - patchesSize = (patchesSize == 0) ? 16 : 2 * patchesSize; - patchesA = (GfxPatch *)greallocn(patchesA, - patchesSize, 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)) { - delete shading; - return NULL; - } - return shading; - - err2: - obj1.free(); - err1: - return NULL; -} - -GfxShading *GfxPatchMeshShading::copy() { - return new GfxPatchMeshShading(this); -} - -//------------------------------------------------------------------------ -// GfxImageColorMap -//------------------------------------------------------------------------ - -GfxImageColorMap::GfxImageColorMap(int bitsA, Object *decode, - GfxColorSpace *colorSpaceA) { - GfxIndexedColorSpace *indexedCS; - GfxSeparationColorSpace *sepCS; - int maxPixel, indexHigh; - Guchar *indexedLookup; - Function *sepFunc; - Object obj; - double x[gfxColorMaxComps]; - double y[gfxColorMaxComps]; - int i, j, k; - - ok = gTrue; - - // bits per component and color space - bits = bitsA; - maxPixel = (1 << bits) - 1; - colorSpace = colorSpaceA; - - // initialize - for (k = 0; k < gfxColorMaxComps; ++k) { - lookup[k] = NULL; - lookup2[k] = 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; - } - if (nComps > colorSpace->getNComps()) { - error(errSyntaxWarning, -1, "Too many elements in Decode array"); - nComps = colorSpace->getNComps(); - } - 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. - for (k = 0; k < nComps; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(maxPixel + 1, - sizeof(GfxColorComp)); - for (i = 0; i <= maxPixel; ++i) { - lookup[k][i] = dblToCol(decodeLow[k] + - (i * decodeRange[k]) / maxPixel); - } - } - - // Optimization: for Indexed and Separation color spaces (which have - // only one component), we pre-compute a second lookup table with - // color values - colorSpace2 = NULL; - nComps2 = 0; - if (colorSpace->getMode() == 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(); - indexedLookup = indexedCS->getLookup(); - colorSpace2->getDefaultRanges(x, y, indexHigh); - for (k = 0; k < nComps2; ++k) { - lookup2[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; - } - for (k = 0; k < nComps2; ++k) { - lookup2[k][i] = - dblToCol(x[k] + (indexedLookup[j*nComps2 + k] / 255.0) * y[k]); - } - } - } else if (colorSpace->getMode() == csSeparation) { - sepCS = (GfxSeparationColorSpace *)colorSpace; - colorSpace2 = sepCS->getAlt(); - nComps2 = colorSpace2->getNComps(); - sepFunc = sepCS->getFunc(); - for (k = 0; k < nComps2; ++k) { - lookup2[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); - for (k = 0; k < nComps2; ++k) { - lookup2[k][i] = dblToCol(y[k]); - } - } - } - - 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; - for (k = 0; k < nComps; ++k) { - lookup[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); - memcpy(lookup[k], colorMap->lookup[k], n * sizeof(GfxColorComp)); - } - if (colorSpace->getMode() == csIndexed) { - colorSpace2 = ((GfxIndexedColorSpace *)colorSpace)->getBase(); - for (k = 0; k < nComps2; ++k) { - lookup2[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); - memcpy(lookup2[k], colorMap->lookup2[k], n * sizeof(GfxColorComp)); - } - } else if (colorSpace->getMode() == csSeparation) { - colorSpace2 = ((GfxSeparationColorSpace *)colorSpace)->getAlt(); - for (k = 0; k < nComps2; ++k) { - lookup2[k] = (GfxColorComp *)gmallocn(n, sizeof(GfxColorComp)); - memcpy(lookup2[k], colorMap->lookup2[k], n * sizeof(GfxColorComp)); - } - } - 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(lookup2[i]); - } -} - -void GfxImageColorMap::getGray(Guchar *x, GfxGray *gray) { - GfxColor color; - int i; - - if (colorSpace2) { - for (i = 0; i < nComps2; ++i) { - color.c[i] = lookup2[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] = lookup2[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::getCMYK(Guchar *x, GfxCMYK *cmyk) { - GfxColor color; - int i; - - if (colorSpace2) { - for (i = 0; i < nComps2; ++i) { - color.c[i] = lookup2[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 *= 2; - 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 *= 2; - 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 || (n > 0 && subpaths[n-1]->isClosed())) { - if (n >= size) { - size *= 2; - subpaths = (GfxSubpath **) - greallocn(subpaths, size, sizeof(GfxSubpath *)); - } - if (justMoved) { - subpaths[n] = new GfxSubpath(firstX, firstY); - } else { - subpaths[n] = new GfxSubpath(subpaths[n-1]->getLastX(), - subpaths[n-1]->getLastY()); - } - ++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 || (n > 0 && subpaths[n-1]->isClosed())) { - if (n >= size) { - size *= 2; - subpaths = (GfxSubpath **) - greallocn(subpaths, size, sizeof(GfxSubpath *)); - } - if (justMoved) { - subpaths[n] = new GfxSubpath(firstX, firstY); - } else { - subpaths[n] = new GfxSubpath(subpaths[n-1]->getLastX(), - subpaths[n-1]->getLastY()); - } - ++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 *= 2; - 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::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; -} - -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; - } -} - -// Used for copy(); -GfxState::GfxState(GfxState *state, GBool copyPath) { - 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 (copyPath) { - path = state->path->copy(); - } - 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) { - int i; - - ctm[0] = a; - ctm[1] = b; - ctm[2] = c; - ctm[3] = d; - ctm[4] = e; - ctm[5] = f; - - // avoid FP exceptions on badly messed up PDF files - for (i = 0; i < 6; ++i) { - if (ctm[i] > 1e10) { - ctm[i] = 1e10; - } else if (ctm[i] < -1e10) { - ctm[i] = -1e10; - } - } -} - -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]; - int i; - - 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]; - - // avoid FP exceptions on badly messed up PDF files - for (i = 0; i < 6; ++i) { - if (ctm[i] > 1e10) { - ctm[i] = 1e10; - } else if (ctm[i] < -1e10) { - ctm[i] = -1e10; - } - } -} - -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::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::clipToRect(double xMin, double yMin, double xMax, double yMax) { - double x, y, xMin1, yMin1, xMax1, yMax1; - - transform(xMin, yMin, &x, &y); - xMin1 = xMax1 = x; - yMin1 = yMax1 = y; - transform(xMax, yMin, &x, &y); - if (x < xMin1) { - xMin1 = x; - } else if (x > xMax1) { - xMax1 = x; - } - if (y < yMin1) { - yMin1 = y; - } else if (y > yMax1) { - yMax1 = y; - } - transform(xMax, yMax, &x, &y); - if (x < xMin1) { - xMin1 = x; - } else if (x > xMax1) { - xMax1 = x; - } - if (y < yMin1) { - yMin1 = y; - } else if (y > yMax1) { - yMax1 = y; - } - transform(xMin, yMax, &x, &y); - if (x < xMin1) { - xMin1 = x; - } else if (x > xMax1) { - xMax1 = x; - } - if (y < yMin1) { - yMin1 = y; - } else if (y > yMax1) { - yMax1 = y; - } - - if (xMin1 > clipXMin) { - clipXMin = xMin1; - } - if (yMin1 > clipYMin) { - clipYMin = yMin1; - } - if (xMax1 < clipXMax) { - clipXMax = xMax1; - } - if (yMax1 < clipYMax) { - clipYMax = yMax1; - } -} - -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/thirdparty/xpdf/3.02/src/xpdf/GfxState.h b/thirdparty/xpdf/3.02/src/xpdf/GfxState.h deleted file mode 100644 index afd5b628..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/GfxState.h +++ /dev/null @@ -1,1267 +0,0 @@ -//======================================================================== -// -// GfxState.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GFXSTATE_H -#define GFXSTATE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" -#include "Function.h" - -class Array; -class GfxFont; -class PDFRectangle; -class GfxShading; - -//------------------------------------------------------------------------ -// 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 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 -}; - -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, int recursion = 0); - - // 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; - - // 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 . - 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 color space's overprint mask. - Guint getOverprintMask() { return overprintMask; } - - // Return the number of color space modes - static int getNumColorSpaceModes(); - - // Return the name of the th color space mode. - static char *getColorSpaceModeName(int idx); - -protected: - - Guint overprintMask; -}; - -//------------------------------------------------------------------------ -// 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 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, int recursion); - - 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 -}; - -//------------------------------------------------------------------------ -// 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 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, int recursion); - - 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 -}; - -//------------------------------------------------------------------------ -// 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 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, int recursion); - - 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 -}; - -//------------------------------------------------------------------------ -// 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, int recursion); - - 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 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 -}; - -//------------------------------------------------------------------------ -// GfxIndexedColorSpace -//------------------------------------------------------------------------ - -class GfxIndexedColorSpace: public GfxColorSpace { -public: - - GfxIndexedColorSpace(GfxColorSpace *baseA, int indexHighA); - virtual ~GfxIndexedColorSpace(); - virtual GfxColorSpace *copy(); - virtual GfxColorSpaceMode getMode() { return csIndexed; } - - // Construct an Indexed color space. Returns NULL if unsuccessful. - static GfxColorSpace *parse(Array *arr, int recursion); - - 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 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(GString *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, int recursion); - - 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. - GString *getName() { return name; } - GfxColorSpace *getAlt() { return alt; } - Function *getFunc() { return func; } - -private: - - GfxSeparationColorSpace(GString *nameA, GfxColorSpace *altA, - Function *funcA, GBool nonMarkingA, - Guint overprintMaskA); - - GString *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, GString **namesA, - 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, int recursion); - - 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. - GString *getColorantName(int i) { return names[i]; } - GfxColorSpace *getAlt() { return alt; } - Function *getTintTransformFunc() { return func; } - -private: - - GfxDeviceNColorSpace(int nCompsA, GString **namesA, - GfxColorSpace *alt, Function *func, - GBool nonMarkingA, Guint overprintMaskA); - - int nComps; // number of components - GString // 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, int recursion); - - 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); - - 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); - 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); - - 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); - - int type; - GfxColorSpace *colorSpace; - GfxColor background; - GBool hasBackground; - double xMin, yMin, xMax, yMax; - GBool hasBBox; -}; - -//------------------------------------------------------------------------ -// 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); - - 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 GfxShading { -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); - - virtual GfxShading *copy(); - - void getCoords(double *x0A, double *y0A, double *x1A, double *y1A) - { *x0A = x0; *y0A = y0; *x1A = x1; *y1A = y1; } - 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); - -private: - - double x0, y0, x1, y1; - double t0, t1; - Function *funcs[gfxColorMaxComps]; - int nFuncs; - GBool extend0, extend1; -}; - -//------------------------------------------------------------------------ -// GfxRadialShading -//------------------------------------------------------------------------ - -class GfxRadialShading: public GfxShading { -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); - - 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; } - 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); - -private: - - double x0, y0, r0, x1, y1, r1; - double t0, t1; - Function *funcs[gfxColorMaxComps]; - int nFuncs; - GBool extend0, extend1; -}; - -//------------------------------------------------------------------------ -// 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); - - virtual GfxShading *copy(); - - int getNTriangles() { return nTriangles; } - void getTriangle(int i, double *x0, double *y0, GfxColor *color0, - double *x1, double *y1, GfxColor *color1, - double *x2, double *y2, GfxColor *color2); - -private: - - GfxGouraudVertex *vertices; - int nVertices; - int (*triangles)[3]; - int nTriangles; - Function *funcs[gfxColorMaxComps]; - int nFuncs; -}; - -//------------------------------------------------------------------------ -// GfxPatchMeshShading -//------------------------------------------------------------------------ - -struct GfxPatch { - double x[4][4]; - double y[4][4]; - GfxColor 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); - - virtual GfxShading *copy(); - - int getNPatches() { return nPatches; } - GfxPatch *getPatch(int i) { return &patches[i]; } - -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]; } - - // Convert an image pixel to a color. - void getGray(Guchar *x, GfxGray *gray); - void getRGB(Guchar *x, GfxRGB *rgb); - 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]; - GfxColorComp * // optimized case lookup table - lookup2[gfxColorMaxComps]; - 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]; } - - // 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 (, ) 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 to . - void append(GfxPath *path); - - // Add (, ) 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: - - // Construct a default GfxState, for a device with resolution - // x , page box , page rotation , and - // coordinate system specified by . - GfxState(double hDPIA, double vDPIA, PDFRectangle *pageBox, - int rotateA, GBool upsideDown); - - // Destructor. - ~GfxState(); - - // Copy. - GfxState *copy(GBool copyPath = gFalse) - { return new GfxState(this, copyPath); } - - // Accessors. - double getHDPI() { return hDPI; } - double getVDPI() { return vDPI; } - double *getCTM() { return ctm; } - 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; } - 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 opm) { overprintMode = opm; } - 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 setFont(GfxFont *fontA, double fontSizeA) - { font = fontA; fontSize = 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(); - void clipToRect(double xMin, double yMin, double xMax, double yMax); - - // 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; } - - // Misc - GBool parseBlendMode(Object *obj, GfxBlendMode *mode); - -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 ("OPM") - 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 - - 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, GBool copyPath); -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/GlobalParams.cc b/thirdparty/xpdf/3.02/src/xpdf/GlobalParams.cc deleted file mode 100644 index 76727b38..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/GlobalParams.cc +++ /dev/null @@ -1,3055 +0,0 @@ -//======================================================================== -// -// GlobalParams.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#ifdef ENABLE_PLUGINS -# ifndef WIN32 -# include -# endif -#endif -#ifdef WIN32 -# include -#endif -#if HAVE_PAPER_H -#include -#endif -#include "gmem.h" -#include "GString.h" -#include "GList.h" -#include "GHash.h" -#include "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" - -#ifdef WIN32 -# define strcasecmp stricmp -#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 - -#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 - -//------------------------------------------------------------------------ - -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"}, - {"Symbol", "s050000l.pfb", NULL}, - {"Times-Bold", "n021004l.pfb", "timesbd.ttf"}, - {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"}, - {"Times-Italic", "n021023l.pfb", "timesi.ttf"}, - {"Times-Roman", "n021003l.pfb", "times.ttf"}, - {"ZapfDingbats", "d050000l.pfb", NULL}, - {NULL} -}; - -#ifdef WIN32 -static char *displayFontDirs[] = { - "c:/windows/fonts", - "c:/winnt/fonts", - NULL -}; -#else -static char *displayFontDirs[] = { - "/usr/share/ghostscript/fonts", - "/usr/local/share/ghostscript/fonts", - "/usr/share/fonts/default/Type1", - "/usr/share/fonts/default/ghostscript", - "/usr/share/fonts/type1/gsfonts", - NULL -}; -#endif - -//------------------------------------------------------------------------ - -GlobalParams *globalParams = NULL; - -//------------------------------------------------------------------------ -// DisplayFontParam -//------------------------------------------------------------------------ - -DisplayFontParam::DisplayFontParam(GString *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; - } -} - -#ifdef WIN32 - -//------------------------------------------------------------------------ -// WinFontInfo -//------------------------------------------------------------------------ - -class WinFontInfo: public DisplayFontParam { -public: - - GBool bold, italic; - - static WinFontInfo *make(GString *nameA, GBool boldA, GBool italicA, - HKEY regKey, char *winFontDir); - WinFontInfo(GString *nameA, GBool boldA, GBool italicA, - GString *fileNameA); - virtual ~WinFontInfo(); - GBool equals(WinFontInfo *fi); -}; - -WinFontInfo *WinFontInfo::make(GString *nameA, GBool boldA, GBool italicA, - HKEY regKey, char *winFontDir) { - GString *regName; - GString *fileNameA; - char buf[MAX_PATH]; - DWORD n; - char c; - int i; - - //----- find the font file - fileNameA = NULL; - regName = nameA->copy(); - if (boldA && strcmp(nameA->getCString() + nameA->getLength() - 5, "Black")) { - 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 GString(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(GString *nameA, GBool boldA, GBool italicA, - GString *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(GString *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); - - GList *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 GList(); - 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() { - deleteGList(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(GString *font) { - GString *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 (n > 2 && !strcmp(name->getCString() + n - 2, "MT")) { - name->del(n - 2, 2); - n -= 2; - } - - // look for "Regular" - if (n > 7 && !strcmp(name->getCString() + n - 7, "Regular")) { - name->del(n - 7, 7); - n -= 7; - } - - // look for "Italic" - if (n > 6 && !strcmp(name->getCString() + n - 6, "Italic")) { - name->del(n - 6, 6); - italic = gTrue; - n -= 6; - } else { - italic = gFalse; - } - - // look for "Bold" - if (n > 4 && !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 (n > 2 && !strcmp(name->getCString() + n - 2, "MT")) { - name->del(n - 2, 2); - n -= 2; - } - - // remove trailing "PS" - if (n > 2 && !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; - } - if (!fi) { - // try ignoring the bold flag - for (i = 0; i < fonts->getLength(); ++i) { - fi = (WinFontInfo *)fonts->get(i); - if (!fi->name->cmp(name) && fi->italic == italic) { - break; - } - fi = NULL; - } - } - if (!fi) { - // try ignoring the bold and italic flags - for (i = 0; i < fonts->getLength(); ++i) { - fi = (WinFontInfo *)fonts->get(i); - if (!fi->name->cmp(name)) { - 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 GString(font->lfFaceName), - font->lfWeight >= 600, - font->lfItalic ? gTrue : gFalse, - fl->regKey, fl->winFontDir))) { - fl->add(fi); - } - } - return 1; -} - -#endif // WIN32 - -//------------------------------------------------------------------------ -// PSFontParam -//------------------------------------------------------------------------ - -PSFontParam::PSFontParam(GString *pdfFontNameA, int wModeA, - GString *psFontNameA, GString *encodingA) { - pdfFontName = pdfFontNameA; - wMode = wModeA; - psFontName = psFontNameA; - encoding = encodingA; -} - -PSFontParam::~PSFontParam() { - delete pdfFontName; - delete psFontName; - if (encoding) { - delete encoding; - } -} - -//------------------------------------------------------------------------ -// KeyBinding -//------------------------------------------------------------------------ - -KeyBinding::KeyBinding(int codeA, int modsA, int contextA, char *cmd0) { - code = codeA; - mods = modsA; - context = contextA; - cmds = new GList(); - cmds->append(new GString(cmd0)); -} - -KeyBinding::KeyBinding(int codeA, int modsA, int contextA, - char *cmd0, char *cmd1) { - code = codeA; - mods = modsA; - context = contextA; - cmds = new GList(); - cmds->append(new GString(cmd0)); - cmds->append(new GString(cmd1)); -} - -KeyBinding::KeyBinding(int codeA, int modsA, int contextA, GList *cmdsA) { - code = codeA; - mods = modsA; - context = contextA; - cmds = cmdsA; -} - -KeyBinding::~KeyBinding() { - deleteGList(cmds, GString); -} - -#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) { - GString *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(errIO, -1, "Failed to load plugin '{0:t}'", path); - goto err1; - } - if (!(vt = (XpdfPluginVecTable *) - GetProcAddress(libA, "xpdfPluginVecTable"))) { - error(errIO, -1, "Failed to find xpdfPluginVecTable in plugin '{0:t}'", - path); - goto err2; - } -#else - //~ need to deal with other extensions here - path->append(".so"); - if (!(dlA = dlopen(path->getCString(), RTLD_NOW))) { - error(errIO, -1, "Failed to load plugin '{0:t}': {1:s}", - path, dlerror()); - goto err1; - } - if (!(vt = (XpdfPluginVecTable *)dlsym(dlA, "xpdfPluginVecTable"))) { - error(errIO, -1, "Failed to find xpdfPluginVecTable in plugin '{0:t}'", - path); - goto err2; - } -#endif - - if (vt->version != xpdfPluginVecTable.version) { - error(errIO, -1, "Plugin '{0:t}' is wrong version", path); - goto err2; - } - memcpy(vt, &xpdfPluginVecTable, sizeof(xpdfPluginVecTable)); - -#ifdef WIN32 - if (!(xpdfInitPlugin = (XpdfBool (*)(void)) - GetProcAddress(libA, "xpdfInitPlugin"))) { - error(errIO, -1, "Failed to find xpdfInitPlugin in plugin '{0:t}'", - path); - goto err2; - } -#else - if (!(xpdfInitPlugin = (XpdfBool (*)(void))dlsym(dlA, "xpdfInitPlugin"))) { - error(errIO, -1, "Failed to find xpdfInitPlugin in plugin '{0:t}'", - path); - goto err2; - } -#endif - - if (!(*xpdfInitPlugin)()) { - error(errIO, -1, "Initialization of plugin '{0:t}' failed", path); - 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(char *cfgFileName) { - UnicodeMap *map; - GString *fileName; - FILE *f; - 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 GString(); -#else - baseDir = appendToPath(getHomeDir(), ".xpdf"); -#endif - nameToUnicode = new NameToCharCode(); - cidToUnicodes = new GHash(gTrue); - unicodeToUnicodes = new GHash(gTrue); - residentUnicodeMaps = new GHash(); - unicodeMaps = new GHash(gTrue); - cMapDirs = new GHash(gTrue); - toUnicodeDirs = new GList(); - displayFonts = new GHash(); - displayCIDFonts = new GHash(); - displayNamedCIDFonts = new GHash(); -#if HAVE_PAPER_H - char *paperName; - const struct paper *paperType; - paperinit(); - if ((paperName = systempapername())) { - paperType = paperinfo(paperName); - psPaperWidth = (int)paperpswidth(paperType); - psPaperHeight = (int)paperpsheight(paperType); - } else { - error(errConfig, -1, "No paper information available - using defaults"); - psPaperWidth = defPaperWidth; - psPaperHeight = defPaperHeight; - } - paperdone(); -#else - psPaperWidth = defPaperWidth; - psPaperHeight = defPaperHeight; -#endif - psImageableLLX = psImageableLLY = 0; - psImageableURX = psPaperWidth; - psImageableURY = psPaperHeight; - psCrop = gTrue; - psExpandSmaller = gFalse; - psShrinkLarger = gTrue; - psCenter = gTrue; - psDuplex = gFalse; - psLevel = psLevel2; - psFile = NULL; - psFonts = new GHash(); - psNamedFonts16 = new GList(); - psFonts16 = new GList(); - psEmbedType1 = gTrue; - psEmbedTrueType = gTrue; - psEmbedCIDPostScript = gTrue; - psEmbedCIDTrueType = gTrue; - psFontPassthrough = gFalse; - psPreload = gFalse; - psOPI = gFalse; - psASCIIHex = gFalse; - psUncompressPreloadedImages = gFalse; - psRasterResolution = 300; - psRasterMono = gFalse; - textEncoding = new GString("Latin1"); -#if defined(WIN32) - textEOL = eolDOS; -#elif defined(MACOS) - textEOL = eolMac; -#else - textEOL = eolUnix; -#endif - textPageBreaks = gTrue; - textKeepTinyChars = gFalse; - fontDirs = new GList(); - initialZoom = new GString("125"); - continuousView = gFalse; - enableT1lib = gTrue; - enableFreeType = gTrue; - antialias = gTrue; - vectorAntialias = gTrue; - strokeAdjust = gTrue; - screenType = screenUnset; - screenSize = -1; - screenDotRadius = -1; - screenGamma = 1.0; - screenBlackThreshold = 0.0; - screenWhiteThreshold = 1.0; - drawAnnotations = gTrue; - overprintPreview = gFalse; - launchCommand = NULL; - urlCommand = NULL; - movieCommand = NULL; - mapNumericCharNames = gTrue; - mapUnknownCharNames = gFalse; - createDefaultKeyBindings(); - printCommands = gFalse; - errQuiet = gFalse; - - cidToUnicodeCache = new CharCodeToUnicodeCache(cidToUnicodeCacheSize); - unicodeToUnicodeCache = - new CharCodeToUnicodeCache(unicodeToUnicodeCacheSize); - unicodeMapCache = new UnicodeMapCache(); - cMapCache = new CMapCache(); - -#ifdef WIN32 - winFontList = NULL; -#endif - -#ifdef ENABLE_PLUGINS - plugins = new GList(); - securityHandlers = new GList(); -#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); - - // look for a user config file, then a system-wide config file - f = NULL; - fileName = NULL; - if (cfgFileName && cfgFileName[0]) { - fileName = new GString(cfgFileName); - if (!(f = fopen(fileName->getCString(), "r"))) { - delete fileName; - } - } - if (!f) { - fileName = appendToPath(getHomeDir(), xpdfUserConfigFile); - if (!(f = fopen(fileName->getCString(), "r"))) { - delete fileName; - } - } - if (!f) { -#ifdef WIN32 - char buf[512]; - i = GetModuleFileName(NULL, buf, sizeof(buf)); - if (i <= 0 || i >= sizeof(buf)) { - // error or path too long for buffer - just use the current dir - buf[0] = '\0'; - } - fileName = grabPath(buf); - appendToPath(fileName, xpdfSysConfigFile); -#else - fileName = new GString(xpdfSysConfigFile); -#endif - if (!(f = fopen(fileName->getCString(), "r"))) { - delete fileName; - } - } - if (f) { - parseFile(fileName, f); - delete fileName; - fclose(f); - } -} - -void GlobalParams::createDefaultKeyBindings() { - keyBindings = new GList(); - - //----- mouse buttons - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress1, xpdfKeyModNone, - xpdfKeyContextAny, "startSelection")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMouseRelease1, xpdfKeyModNone, - xpdfKeyContextAny, "endSelection", - "followLinkNoSel")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress2, xpdfKeyModNone, - xpdfKeyContextAny, "startPan")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMouseRelease2, xpdfKeyModNone, - xpdfKeyContextAny, "endPan")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress3, xpdfKeyModNone, - xpdfKeyContextAny, "postPopupMenu")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress4, xpdfKeyModNone, - xpdfKeyContextAny, - "scrollUpPrevPage(16)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress5, xpdfKeyModNone, - xpdfKeyContextAny, - "scrollDownNextPage(16)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress6, xpdfKeyModNone, - xpdfKeyContextAny, "scrollLeft(16)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeMousePress7, xpdfKeyModNone, - xpdfKeyContextAny, "scrollRight(16)")); - - //----- keys - keyBindings->append(new KeyBinding(xpdfKeyCodeHome, xpdfKeyModCtrl, - xpdfKeyContextAny, "gotoPage(1)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeHome, xpdfKeyModNone, - xpdfKeyContextAny, "scrollToTopLeft")); - keyBindings->append(new KeyBinding(xpdfKeyCodeEnd, xpdfKeyModCtrl, - xpdfKeyContextAny, "gotoLastPage")); - keyBindings->append(new KeyBinding(xpdfKeyCodeEnd, xpdfKeyModNone, - xpdfKeyContextAny, - "scrollToBottomRight")); - keyBindings->append(new KeyBinding(xpdfKeyCodePgUp, xpdfKeyModNone, - xpdfKeyContextAny, "pageUp")); - keyBindings->append(new KeyBinding(xpdfKeyCodeBackspace, xpdfKeyModNone, - xpdfKeyContextAny, "pageUp")); - keyBindings->append(new KeyBinding(xpdfKeyCodeDelete, xpdfKeyModNone, - xpdfKeyContextAny, "pageUp")); - keyBindings->append(new KeyBinding(xpdfKeyCodePgDn, xpdfKeyModNone, - xpdfKeyContextAny, "pageDown")); - keyBindings->append(new KeyBinding(' ', xpdfKeyModNone, - xpdfKeyContextAny, "pageDown")); - keyBindings->append(new KeyBinding(xpdfKeyCodeLeft, xpdfKeyModNone, - xpdfKeyContextAny, "scrollLeft(16)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeRight, xpdfKeyModNone, - xpdfKeyContextAny, "scrollRight(16)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeUp, xpdfKeyModNone, - xpdfKeyContextAny, "scrollUp(16)")); - keyBindings->append(new KeyBinding(xpdfKeyCodeDown, xpdfKeyModNone, - xpdfKeyContextAny, "scrollDown(16)")); - keyBindings->append(new KeyBinding('o', xpdfKeyModNone, - xpdfKeyContextAny, "open")); - keyBindings->append(new KeyBinding('O', xpdfKeyModNone, - xpdfKeyContextAny, "open")); - keyBindings->append(new KeyBinding('r', xpdfKeyModNone, - xpdfKeyContextAny, "reload")); - keyBindings->append(new KeyBinding('R', xpdfKeyModNone, - xpdfKeyContextAny, "reload")); - keyBindings->append(new KeyBinding('f', xpdfKeyModNone, - xpdfKeyContextAny, "find")); - keyBindings->append(new KeyBinding('F', xpdfKeyModNone, - xpdfKeyContextAny, "find")); - keyBindings->append(new KeyBinding('f', xpdfKeyModCtrl, - xpdfKeyContextAny, "find")); - keyBindings->append(new KeyBinding('g', xpdfKeyModCtrl, - xpdfKeyContextAny, "findNext")); - keyBindings->append(new KeyBinding('p', xpdfKeyModCtrl, - xpdfKeyContextAny, "print")); - keyBindings->append(new KeyBinding('n', xpdfKeyModNone, - xpdfKeyContextScrLockOff, "nextPage")); - keyBindings->append(new KeyBinding('N', xpdfKeyModNone, - xpdfKeyContextScrLockOff, "nextPage")); - keyBindings->append(new KeyBinding('n', xpdfKeyModNone, - xpdfKeyContextScrLockOn, - "nextPageNoScroll")); - keyBindings->append(new KeyBinding('N', xpdfKeyModNone, - xpdfKeyContextScrLockOn, - "nextPageNoScroll")); - keyBindings->append(new KeyBinding('p', xpdfKeyModNone, - xpdfKeyContextScrLockOff, "prevPage")); - keyBindings->append(new KeyBinding('P', xpdfKeyModNone, - xpdfKeyContextScrLockOff, "prevPage")); - keyBindings->append(new KeyBinding('p', xpdfKeyModNone, - xpdfKeyContextScrLockOn, - "prevPageNoScroll")); - keyBindings->append(new KeyBinding('P', xpdfKeyModNone, - xpdfKeyContextScrLockOn, - "prevPageNoScroll")); - keyBindings->append(new KeyBinding('v', xpdfKeyModNone, - xpdfKeyContextAny, "goForward")); - keyBindings->append(new KeyBinding('b', xpdfKeyModNone, - xpdfKeyContextAny, "goBackward")); - keyBindings->append(new KeyBinding('g', xpdfKeyModNone, - xpdfKeyContextAny, "focusToPageNum")); - keyBindings->append(new KeyBinding('0', xpdfKeyModNone, - xpdfKeyContextAny, "zoomPercent(125)")); - keyBindings->append(new KeyBinding('+', xpdfKeyModNone, - xpdfKeyContextAny, "zoomIn")); - keyBindings->append(new KeyBinding('-', xpdfKeyModNone, - xpdfKeyContextAny, "zoomOut")); - keyBindings->append(new KeyBinding('z', xpdfKeyModNone, - xpdfKeyContextAny, "zoomFitPage")); - keyBindings->append(new KeyBinding('w', xpdfKeyModNone, - xpdfKeyContextAny, "zoomFitWidth")); - keyBindings->append(new KeyBinding('f', xpdfKeyModAlt, - xpdfKeyContextAny, - "toggleFullScreenMode")); - keyBindings->append(new KeyBinding('l', xpdfKeyModCtrl, - xpdfKeyContextAny, "redraw")); - keyBindings->append(new KeyBinding('w', xpdfKeyModCtrl, - xpdfKeyContextAny, "closeWindow")); - keyBindings->append(new KeyBinding('?', xpdfKeyModNone, - xpdfKeyContextAny, "about")); - keyBindings->append(new KeyBinding('q', xpdfKeyModNone, - xpdfKeyContextAny, "quit")); - keyBindings->append(new KeyBinding('Q', xpdfKeyModNone, - xpdfKeyContextAny, "quit")); -} - -void GlobalParams::parseFile(GString *fileName, FILE *f) { - int line; - char buf[512]; - - line = 1; - while (getLine(buf, sizeof(buf) - 1, f)) { - parseLine(buf, fileName, line); - ++line; - } -} - -void GlobalParams::parseLine(char *buf, GString *fileName, int line) { - GList *tokens; - GString *cmd, *incFile; - char *p1, *p2; - FILE *f2; - - // break the line into tokens - tokens = new GList(); - p1 = buf; - while (*p1) { - for (; *p1 && isspace(*p1); ++p1) ; - if (!*p1) { - break; - } - if (*p1 == '"' || *p1 == '\'') { - for (p2 = p1 + 1; *p2 && *p2 != *p1; ++p2) ; - ++p1; - } else { - for (p2 = p1 + 1; *p2 && !isspace(*p2); ++p2) ; - } - tokens->append(new GString(p1, p2 - p1)); - p1 = *p2 ? p2 + 1 : p2; - } - - // parse the line - if (tokens->getLength() > 0 && - ((GString *)tokens->get(0))->getChar(0) != '#') { - cmd = (GString *)tokens->get(0); - if (!cmd->cmp("include")) { - if (tokens->getLength() == 2) { - incFile = (GString *)tokens->get(1); - if ((f2 = openFile(incFile->getCString(), "r"))) { - parseFile(incFile, f2); - fclose(f2); - } else { - error(errConfig, -1, - "Couldn't find included config file: '{0:t}' ({1:t}:{2:d})", - incFile, fileName, line); - } - } else { - error(errConfig, -1, "Bad 'include' config file command ({0:t}:{1:d})", - fileName, line); - } - } else if (!cmd->cmp("nameToUnicode")) { - parseNameToUnicode(tokens, fileName, line); - } else if (!cmd->cmp("cidToUnicode")) { - parseCIDToUnicode(tokens, fileName, line); - } else if (!cmd->cmp("unicodeToUnicode")) { - parseUnicodeToUnicode(tokens, fileName, line); - } else if (!cmd->cmp("unicodeMap")) { - parseUnicodeMap(tokens, fileName, line); - } else if (!cmd->cmp("cMapDir")) { - parseCMapDir(tokens, fileName, line); - } else if (!cmd->cmp("toUnicodeDir")) { - parseToUnicodeDir(tokens, fileName, line); - } else if (!cmd->cmp("displayFontT1")) { - parseDisplayFont(tokens, displayFonts, displayFontT1, fileName, line); - } else if (!cmd->cmp("displayFontTT")) { - parseDisplayFont(tokens, displayFonts, displayFontTT, fileName, line); - } else if (!cmd->cmp("displayNamedCIDFontT1")) { - parseDisplayFont(tokens, displayNamedCIDFonts, - displayFontT1, fileName, line); - } else if (!cmd->cmp("displayCIDFontT1")) { - parseDisplayFont(tokens, displayCIDFonts, - displayFontT1, fileName, line); - } else if (!cmd->cmp("displayNamedCIDFontTT")) { - parseDisplayFont(tokens, displayNamedCIDFonts, - displayFontTT, fileName, line); - } else if (!cmd->cmp("displayCIDFontTT")) { - parseDisplayFont(tokens, displayCIDFonts, - displayFontTT, fileName, line); - } else if (!cmd->cmp("psFile")) { - parsePSFile(tokens, fileName, line); - } else if (!cmd->cmp("psFont")) { - parsePSFont(tokens, fileName, line); - } else if (!cmd->cmp("psNamedFont16")) { - parsePSFont16("psNamedFont16", psNamedFonts16, - tokens, fileName, line); - } else if (!cmd->cmp("psFont16")) { - parsePSFont16("psFont16", psFonts16, tokens, fileName, line); - } else if (!cmd->cmp("psPaperSize")) { - parsePSPaperSize(tokens, fileName, line); - } else if (!cmd->cmp("psImageableArea")) { - parsePSImageableArea(tokens, fileName, line); - } else if (!cmd->cmp("psCrop")) { - parseYesNo("psCrop", &psCrop, tokens, fileName, line); - } else if (!cmd->cmp("psExpandSmaller")) { - parseYesNo("psExpandSmaller", &psExpandSmaller, - tokens, fileName, line); - } else if (!cmd->cmp("psShrinkLarger")) { - parseYesNo("psShrinkLarger", &psShrinkLarger, tokens, fileName, line); - } else if (!cmd->cmp("psCenter")) { - parseYesNo("psCenter", &psCenter, tokens, fileName, line); - } else if (!cmd->cmp("psDuplex")) { - parseYesNo("psDuplex", &psDuplex, tokens, fileName, line); - } else if (!cmd->cmp("psLevel")) { - parsePSLevel(tokens, fileName, line); - } else if (!cmd->cmp("psEmbedType1Fonts")) { - parseYesNo("psEmbedType1", &psEmbedType1, tokens, fileName, line); - } else if (!cmd->cmp("psEmbedTrueTypeFonts")) { - parseYesNo("psEmbedTrueType", &psEmbedTrueType, - tokens, fileName, line); - } else if (!cmd->cmp("psEmbedCIDPostScriptFonts")) { - parseYesNo("psEmbedCIDPostScript", &psEmbedCIDPostScript, - tokens, fileName, line); - } else if (!cmd->cmp("psEmbedCIDTrueTypeFonts")) { - parseYesNo("psEmbedCIDTrueType", &psEmbedCIDTrueType, - tokens, fileName, line); - } else if (!cmd->cmp("psFontPassthrough")) { - parseYesNo("psFontPassthrough", &psFontPassthrough, - tokens, fileName, line); - } else if (!cmd->cmp("psPreload")) { - parseYesNo("psPreload", &psPreload, tokens, fileName, line); - } else if (!cmd->cmp("psOPI")) { - parseYesNo("psOPI", &psOPI, tokens, fileName, line); - } else if (!cmd->cmp("psASCIIHex")) { - parseYesNo("psASCIIHex", &psASCIIHex, tokens, fileName, line); - } else if (!cmd->cmp("psUncompressPreloadedImages")) { - parseYesNo("psUncompressPreloadedImages", &psUncompressPreloadedImages, - tokens, fileName, line); - } else if (!cmd->cmp("psRasterResolution")) { - parseFloat("psRasterResolution", &psRasterResolution, - tokens, fileName, line); - } else if (!cmd->cmp("psRasterMono")) { - parseYesNo("psRasterMono", &psRasterMono, tokens, fileName, line); - } else if (!cmd->cmp("textEncoding")) { - parseTextEncoding(tokens, fileName, line); - } else if (!cmd->cmp("textEOL")) { - parseTextEOL(tokens, fileName, line); - } else if (!cmd->cmp("textPageBreaks")) { - parseYesNo("textPageBreaks", &textPageBreaks, - tokens, fileName, line); - } else if (!cmd->cmp("textKeepTinyChars")) { - parseYesNo("textKeepTinyChars", &textKeepTinyChars, - tokens, fileName, line); - } else if (!cmd->cmp("fontDir")) { - parseFontDir(tokens, fileName, line); - } else if (!cmd->cmp("initialZoom")) { - parseInitialZoom(tokens, fileName, line); - } else if (!cmd->cmp("continuousView")) { - parseYesNo("continuousView", &continuousView, tokens, fileName, line); - } else if (!cmd->cmp("enableT1lib")) { - parseYesNo("enableT1lib", &enableT1lib, tokens, fileName, line); - } else if (!cmd->cmp("enableFreeType")) { - parseYesNo("enableFreeType", &enableFreeType, tokens, fileName, line); - } else if (!cmd->cmp("antialias")) { - parseYesNo("antialias", &antialias, tokens, fileName, line); - } else if (!cmd->cmp("vectorAntialias")) { - parseYesNo("vectorAntialias", &vectorAntialias, - tokens, fileName, line); - } else if (!cmd->cmp("strokeAdjust")) { - parseYesNo("strokeAdjust", &strokeAdjust, tokens, fileName, line); - } else if (!cmd->cmp("screenType")) { - parseScreenType(tokens, fileName, line); - } else if (!cmd->cmp("screenSize")) { - parseInteger("screenSize", &screenSize, tokens, fileName, line); - } else if (!cmd->cmp("screenDotRadius")) { - parseInteger("screenDotRadius", &screenDotRadius, - tokens, fileName, line); - } else if (!cmd->cmp("screenGamma")) { - parseFloat("screenGamma", &screenGamma, - tokens, fileName, line); - } else if (!cmd->cmp("screenBlackThreshold")) { - parseFloat("screenBlackThreshold", &screenBlackThreshold, - tokens, fileName, line); - } else if (!cmd->cmp("screenWhiteThreshold")) { - parseFloat("screenWhiteThreshold", &screenWhiteThreshold, - tokens, fileName, line); - } else if (!cmd->cmp("drawAnnotations")) { - parseYesNo("drawAnnotations", &drawAnnotations, - tokens, fileName, line); - } else if (!cmd->cmp("overprintPreview")) { - parseYesNo("overprintPreview", &overprintPreview, - tokens, fileName, line); - } else if (!cmd->cmp("launchCommand")) { - parseCommand("launchCommand", &launchCommand, tokens, fileName, line); - } else if (!cmd->cmp("urlCommand")) { - parseCommand("urlCommand", &urlCommand, tokens, fileName, line); - } else if (!cmd->cmp("movieCommand")) { - parseCommand("movieCommand", &movieCommand, tokens, fileName, line); - } else if (!cmd->cmp("mapNumericCharNames")) { - parseYesNo("mapNumericCharNames", &mapNumericCharNames, - tokens, fileName, line); - } else if (!cmd->cmp("mapUnknownCharNames")) { - parseYesNo("mapUnknownCharNames", &mapUnknownCharNames, - tokens, fileName, line); - } else if (!cmd->cmp("bind")) { - parseBind(tokens, fileName, line); - } else if (!cmd->cmp("unbind")) { - parseUnbind(tokens, fileName, line); - } else if (!cmd->cmp("printCommands")) { - parseYesNo("printCommands", &printCommands, tokens, fileName, line); - } else if (!cmd->cmp("errQuiet")) { - parseYesNo("errQuiet", &errQuiet, tokens, fileName, line); - } else { - error(errConfig, -1, "Unknown config file command '{0:t}' ({1:t}:{2:d})", - cmd, fileName, line); - if (!cmd->cmp("displayFontX") || - !cmd->cmp("displayNamedCIDFontX") || - !cmd->cmp("displayCIDFontX")) { - error(errConfig, -1, "Xpdf no longer supports X fonts"); - } else if (!cmd->cmp("t1libControl") || !cmd->cmp("freetypeControl")) { - error(errConfig, -1, - "The t1libControl and freetypeControl options have been replaced by the enableT1lib, enableFreeType, and antialias options"); - } else if (!cmd->cmp("fontpath") || !cmd->cmp("fontmap")) { - error(errConfig, -1, - "The config file format has changed since Xpdf 0.9x"); - } - } - } - - deleteGList(tokens, GString); -} - -void GlobalParams::parseNameToUnicode(GList *tokens, GString *fileName, - int line) { - GString *name; - char *tok1, *tok2; - FILE *f; - char buf[256]; - int line2; - Unicode u; - - if (tokens->getLength() != 2) { - error(errConfig, -1, - "Bad 'nameToUnicode' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - name = (GString *)tokens->get(1); - if (!(f = openFile(name->getCString(), "r"))) { - error(errConfig, -1, "Couldn't open 'nameToUnicode' file '{0:t}'", name); - return; - } - line2 = 1; - while (getLine(buf, sizeof(buf), f)) { - tok1 = strtok(buf, " \t\r\n"); - tok2 = strtok(NULL, " \t\r\n"); - if (tok1 && tok2) { - sscanf(tok1, "%x", &u); - nameToUnicode->add(tok2, u); - } else { - error(errConfig, -1, "Bad line in 'nameToUnicode' file ({0:t}:{1:d})", - name, line2); - } - ++line2; - } - fclose(f); -} - -void GlobalParams::parseCIDToUnicode(GList *tokens, GString *fileName, - int line) { - GString *collection, *name, *old; - - if (tokens->getLength() != 3) { - error(errConfig, -1, - "Bad 'cidToUnicode' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - collection = (GString *)tokens->get(1); - name = (GString *)tokens->get(2); - if ((old = (GString *)cidToUnicodes->remove(collection))) { - delete old; - } - cidToUnicodes->add(collection->copy(), name->copy()); -} - -void GlobalParams::parseUnicodeToUnicode(GList *tokens, GString *fileName, - int line) { - GString *font, *file, *old; - - if (tokens->getLength() != 3) { - error(errConfig, -1, - "Bad 'unicodeToUnicode' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - font = (GString *)tokens->get(1); - file = (GString *)tokens->get(2); - if ((old = (GString *)unicodeToUnicodes->remove(font))) { - delete old; - } - unicodeToUnicodes->add(font->copy(), file->copy()); -} - -void GlobalParams::parseUnicodeMap(GList *tokens, GString *fileName, - int line) { - GString *encodingName, *name, *old; - - if (tokens->getLength() != 3) { - error(errConfig, -1, "Bad 'unicodeMap' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - encodingName = (GString *)tokens->get(1); - name = (GString *)tokens->get(2); - if ((old = (GString *)unicodeMaps->remove(encodingName))) { - delete old; - } - unicodeMaps->add(encodingName->copy(), name->copy()); -} - -void GlobalParams::parseCMapDir(GList *tokens, GString *fileName, int line) { - GString *collection, *dir; - GList *list; - - if (tokens->getLength() != 3) { - error(errConfig, -1, "Bad 'cMapDir' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - collection = (GString *)tokens->get(1); - dir = (GString *)tokens->get(2); - if (!(list = (GList *)cMapDirs->lookup(collection))) { - list = new GList(); - cMapDirs->add(collection->copy(), list); - } - list->append(dir->copy()); -} - -void GlobalParams::parseToUnicodeDir(GList *tokens, GString *fileName, - int line) { - if (tokens->getLength() != 2) { - error(errConfig, -1, - "Bad 'toUnicodeDir' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - toUnicodeDirs->append(((GString *)tokens->get(1))->copy()); -} - -void GlobalParams::parseDisplayFont(GList *tokens, GHash *fontHash, - DisplayFontParamKind kind, - GString *fileName, int line) { - DisplayFontParam *param, *old; - - if (tokens->getLength() < 2) { - goto err1; - } - param = new DisplayFontParam(((GString *)tokens->get(1))->copy(), kind); - - switch (kind) { - case displayFontT1: - if (tokens->getLength() != 3) { - goto err2; - } - param->t1.fileName = ((GString *)tokens->get(2))->copy(); - break; - case displayFontTT: - if (tokens->getLength() != 3) { - goto err2; - } - param->tt.fileName = ((GString *)tokens->get(2))->copy(); - break; - } - - if ((old = (DisplayFontParam *)fontHash->remove(param->name))) { - delete old; - } - fontHash->add(param->name, param); - return; - - err2: - delete param; - err1: - error(errConfig, -1, "Bad 'display*Font*' config file command ({0:t}:{1:d})", - fileName, line); -} - -void GlobalParams::parsePSPaperSize(GList *tokens, GString *fileName, - int line) { - GString *tok; - - if (tokens->getLength() == 2) { - tok = (GString *)tokens->get(1); - if (!setPSPaperSize(tok->getCString())) { - error(errConfig, -1, - "Bad 'psPaperSize' config file command ({0:s}:{1:d})", - fileName, line); - } - } else if (tokens->getLength() == 3) { - tok = (GString *)tokens->get(1); - psPaperWidth = atoi(tok->getCString()); - tok = (GString *)tokens->get(2); - psPaperHeight = atoi(tok->getCString()); - psImageableLLX = psImageableLLY = 0; - psImageableURX = psPaperWidth; - psImageableURY = psPaperHeight; - } else { - error(errConfig, -1, "Bad 'psPaperSize' config file command ({0:t}:{1:d})", - fileName, line); - } -} - -void GlobalParams::parsePSImageableArea(GList *tokens, GString *fileName, - int line) { - if (tokens->getLength() != 5) { - error(errConfig, -1, - "Bad 'psImageableArea' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - psImageableLLX = atoi(((GString *)tokens->get(1))->getCString()); - psImageableLLY = atoi(((GString *)tokens->get(2))->getCString()); - psImageableURX = atoi(((GString *)tokens->get(3))->getCString()); - psImageableURY = atoi(((GString *)tokens->get(4))->getCString()); -} - -void GlobalParams::parsePSLevel(GList *tokens, GString *fileName, int line) { - GString *tok; - - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad 'psLevel' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - tok = (GString *)tokens->get(1); - if (!tok->cmp("level1")) { - psLevel = psLevel1; - } else if (!tok->cmp("level1sep")) { - psLevel = psLevel1Sep; - } else if (!tok->cmp("level2")) { - psLevel = psLevel2; - } else if (!tok->cmp("level2sep")) { - psLevel = psLevel2Sep; - } else if (!tok->cmp("level3")) { - psLevel = psLevel3; - } else if (!tok->cmp("level3Sep")) { - psLevel = psLevel3Sep; - } else { - error(errConfig, -1, "Bad 'psLevel' config file command ({0:t}:{1:d})", - fileName, line); - } -} - -void GlobalParams::parsePSFile(GList *tokens, GString *fileName, int line) { - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad 'psFile' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - if (psFile) { - delete psFile; - } - psFile = ((GString *)tokens->get(1))->copy(); -} - -void GlobalParams::parsePSFont(GList *tokens, GString *fileName, int line) { - PSFontParam *param; - - if (tokens->getLength() != 3) { - error(errConfig, -1, "Bad 'psFont' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - param = new PSFontParam(((GString *)tokens->get(1))->copy(), 0, - ((GString *)tokens->get(2))->copy(), NULL); - psFonts->add(param->pdfFontName, param); -} - -void GlobalParams::parsePSFont16(char *cmdName, GList *fontList, - GList *tokens, GString *fileName, int line) { - PSFontParam *param; - int wMode; - GString *tok; - - if (tokens->getLength() != 5) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - tok = (GString *)tokens->get(2); - if (!tok->cmp("H")) { - wMode = 0; - } else if (!tok->cmp("V")) { - wMode = 1; - } else { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - param = new PSFontParam(((GString *)tokens->get(1))->copy(), - wMode, - ((GString *)tokens->get(3))->copy(), - ((GString *)tokens->get(4))->copy()); - fontList->append(param); -} - -void GlobalParams::parseTextEncoding(GList *tokens, GString *fileName, - int line) { - if (tokens->getLength() != 2) { - error(errConfig, -1, - "Bad 'textEncoding' config file command ({0:s}:{1:d})", - fileName, line); - return; - } - delete textEncoding; - textEncoding = ((GString *)tokens->get(1))->copy(); -} - -void GlobalParams::parseTextEOL(GList *tokens, GString *fileName, int line) { - GString *tok; - - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad 'textEOL' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - tok = (GString *)tokens->get(1); - if (!tok->cmp("unix")) { - textEOL = eolUnix; - } else if (!tok->cmp("dos")) { - textEOL = eolDOS; - } else if (!tok->cmp("mac")) { - textEOL = eolMac; - } else { - error(errConfig, -1, "Bad 'textEOL' config file command ({0:t}:{1:d})", - fileName, line); - } -} - -void GlobalParams::parseFontDir(GList *tokens, GString *fileName, int line) { - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad 'fontDir' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - fontDirs->append(((GString *)tokens->get(1))->copy()); -} - -void GlobalParams::parseInitialZoom(GList *tokens, - GString *fileName, int line) { - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad 'initialZoom' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - delete initialZoom; - initialZoom = ((GString *)tokens->get(1))->copy(); -} - -void GlobalParams::parseScreenType(GList *tokens, GString *fileName, - int line) { - GString *tok; - - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad 'screenType' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - tok = (GString *)tokens->get(1); - if (!tok->cmp("dispersed")) { - screenType = screenDispersed; - } else if (!tok->cmp("clustered")) { - screenType = screenClustered; - } else if (!tok->cmp("stochasticClustered")) { - screenType = screenStochasticClustered; - } else { - error(errConfig, -1, "Bad 'screenType' config file command ({0:t}:{1:d})", - fileName, line); - } -} - -void GlobalParams::parseBind(GList *tokens, GString *fileName, int line) { - KeyBinding *binding; - GList *cmds; - int code, mods, context, i; - - if (tokens->getLength() < 4) { - error(errConfig, -1, "Bad 'bind' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - if (!parseKey((GString *)tokens->get(1), (GString *)tokens->get(2), - &code, &mods, &context, - "bind", tokens, fileName, line)) { - return; - } - for (i = 0; i < keyBindings->getLength(); ++i) { - binding = (KeyBinding *)keyBindings->get(i); - if (binding->code == code && - binding->mods == mods && - binding->context == context) { - delete (KeyBinding *)keyBindings->del(i); - break; - } - } - cmds = new GList(); - for (i = 3; i < tokens->getLength(); ++i) { - cmds->append(((GString *)tokens->get(i))->copy()); - } - keyBindings->append(new KeyBinding(code, mods, context, cmds)); -} - -void GlobalParams::parseUnbind(GList *tokens, GString *fileName, int line) { - KeyBinding *binding; - int code, mods, context, i; - - if (tokens->getLength() != 3) { - error(errConfig, -1, "Bad 'unbind' config file command ({0:t}:{1:d})", - fileName, line); - return; - } - if (!parseKey((GString *)tokens->get(1), (GString *)tokens->get(2), - &code, &mods, &context, - "unbind", tokens, fileName, line)) { - return; - } - for (i = 0; i < keyBindings->getLength(); ++i) { - binding = (KeyBinding *)keyBindings->get(i); - if (binding->code == code && - binding->mods == mods && - binding->context == context) { - delete (KeyBinding *)keyBindings->del(i); - break; - } - } -} - -GBool GlobalParams::parseKey(GString *modKeyStr, GString *contextStr, - int *code, int *mods, int *context, - char *cmdName, - GList *tokens, GString *fileName, int line) { - char *p0; - int btn; - - *mods = xpdfKeyModNone; - p0 = modKeyStr->getCString(); - while (1) { - if (!strncmp(p0, "shift-", 6)) { - *mods |= xpdfKeyModShift; - p0 += 6; - } else if (!strncmp(p0, "ctrl-", 5)) { - *mods |= xpdfKeyModCtrl; - p0 += 5; - } else if (!strncmp(p0, "alt-", 4)) { - *mods |= xpdfKeyModAlt; - p0 += 4; - } else { - break; - } - } - - if (!strcmp(p0, "space")) { - *code = ' '; - } else if (!strcmp(p0, "tab")) { - *code = xpdfKeyCodeTab; - } else if (!strcmp(p0, "return")) { - *code = xpdfKeyCodeReturn; - } else if (!strcmp(p0, "enter")) { - *code = xpdfKeyCodeEnter; - } else if (!strcmp(p0, "backspace")) { - *code = xpdfKeyCodeBackspace; - } else if (!strcmp(p0, "insert")) { - *code = xpdfKeyCodeInsert; - } else if (!strcmp(p0, "delete")) { - *code = xpdfKeyCodeDelete; - } else if (!strcmp(p0, "home")) { - *code = xpdfKeyCodeHome; - } else if (!strcmp(p0, "end")) { - *code = xpdfKeyCodeEnd; - } else if (!strcmp(p0, "pgup")) { - *code = xpdfKeyCodePgUp; - } else if (!strcmp(p0, "pgdn")) { - *code = xpdfKeyCodePgDn; - } else if (!strcmp(p0, "left")) { - *code = xpdfKeyCodeLeft; - } else if (!strcmp(p0, "right")) { - *code = xpdfKeyCodeRight; - } else if (!strcmp(p0, "up")) { - *code = xpdfKeyCodeUp; - } else if (!strcmp(p0, "down")) { - *code = xpdfKeyCodeDown; - } else if (p0[0] == 'f' && p0[1] >= '1' && p0[1] <= '9' && !p0[2]) { - *code = xpdfKeyCodeF1 + (p0[1] - '1'); - } else if (p0[0] == 'f' && - ((p0[1] >= '1' && p0[1] <= '2' && p0[2] >= '0' && p0[2] <= '9') || - (p0[1] == '3' && p0[2] >= '0' && p0[2] <= '5')) && - !p0[3]) { - *code = xpdfKeyCodeF1 + 10 * (p0[1] - '0') + (p0[2] - '0') - 1; - } else if (!strncmp(p0, "mousePress", 10) && - p0[10] >= '0' && p0[10] <= '9' && - (!p0[11] || (p0[11] >= '0' && p0[11] <= '9' && !p0[12])) && - (btn = atoi(p0 + 10)) >= 1 && btn <= 32) { - *code = xpdfKeyCodeMousePress1 + btn - 1; - } else if (!strncmp(p0, "mouseRelease", 12) && - p0[12] >= '0' && p0[12] <= '9' && - (!p0[13] || (p0[13] >= '0' && p0[13] <= '9' && !p0[14])) && - (btn = atoi(p0 + 12)) >= 1 && btn <= 32) { - *code = xpdfKeyCodeMouseRelease1 + btn - 1; - } else if (*p0 >= 0x20 && *p0 <= 0x7e && !p0[1]) { - *code = (int)*p0; - } else { - error(errConfig, -1, - "Bad key/modifier in '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return gFalse; - } - - p0 = contextStr->getCString(); - if (!strcmp(p0, "any")) { - *context = xpdfKeyContextAny; - } else { - *context = xpdfKeyContextAny; - while (1) { - if (!strncmp(p0, "fullScreen", 10)) { - *context |= xpdfKeyContextFullScreen; - p0 += 10; - } else if (!strncmp(p0, "window", 6)) { - *context |= xpdfKeyContextWindow; - p0 += 6; - } else if (!strncmp(p0, "continuous", 10)) { - *context |= xpdfKeyContextContinuous; - p0 += 10; - } else if (!strncmp(p0, "singlePage", 10)) { - *context |= xpdfKeyContextSinglePage; - p0 += 10; - } else if (!strncmp(p0, "overLink", 8)) { - *context |= xpdfKeyContextOverLink; - p0 += 8; - } else if (!strncmp(p0, "offLink", 7)) { - *context |= xpdfKeyContextOffLink; - p0 += 7; - } else if (!strncmp(p0, "outline", 7)) { - *context |= xpdfKeyContextOutline; - p0 += 7; - } else if (!strncmp(p0, "mainWin", 7)) { - *context |= xpdfKeyContextMainWin; - p0 += 7; - } else if (!strncmp(p0, "scrLockOn", 9)) { - *context |= xpdfKeyContextScrLockOn; - p0 += 9; - } else if (!strncmp(p0, "scrLockOff", 10)) { - *context |= xpdfKeyContextScrLockOff; - p0 += 10; - } else { - error(errConfig, -1, - "Bad context in '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return gFalse; - } - if (!*p0) { - break; - } - if (*p0 != ',') { - error(errConfig, -1, - "Bad context in '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return gFalse; - } - ++p0; - } - } - - return gTrue; -} - -void GlobalParams::parseCommand(char *cmdName, GString **val, - GList *tokens, GString *fileName, int line) { - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - if (*val) { - delete *val; - } - *val = ((GString *)tokens->get(1))->copy(); -} - -void GlobalParams::parseYesNo(char *cmdName, GBool *flag, - GList *tokens, GString *fileName, int line) { - GString *tok; - - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - tok = (GString *)tokens->get(1); - if (!parseYesNo2(tok->getCString(), flag)) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - } -} - -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; -} - -void GlobalParams::parseInteger(char *cmdName, int *val, - GList *tokens, GString *fileName, int line) { - GString *tok; - int i; - - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - tok = (GString *)tokens->get(1); - if (tok->getLength() == 0) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - if (tok->getChar(0) == '-') { - i = 1; - } else { - i = 0; - } - for (; i < tok->getLength(); ++i) { - if (tok->getChar(i) < '0' || tok->getChar(i) > '9') { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - } - *val = atoi(tok->getCString()); -} - -void GlobalParams::parseFloat(char *cmdName, double *val, - GList *tokens, GString *fileName, int line) { - GString *tok; - int i; - - if (tokens->getLength() != 2) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - tok = (GString *)tokens->get(1); - if (tok->getLength() == 0) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - if (tok->getChar(0) == '-') { - i = 1; - } else { - i = 0; - } - for (; i < tok->getLength(); ++i) { - if (!((tok->getChar(i) >= '0' && tok->getChar(i) <= '9') || - tok->getChar(i) == '.')) { - error(errConfig, -1, "Bad '{0:s}' config file command ({1:t}:{2:d})", - cmdName, fileName, line); - return; - } - } - *val = atof(tok->getCString()); -} - -GlobalParams::~GlobalParams() { - GHashIter *iter; - GString *key; - GList *list; - - freeBuiltinFontTables(); - - delete macRomanReverseMap; - - delete baseDir; - delete nameToUnicode; - deleteGHash(cidToUnicodes, GString); - deleteGHash(unicodeToUnicodes, GString); - deleteGHash(residentUnicodeMaps, UnicodeMap); - deleteGHash(unicodeMaps, GString); - deleteGList(toUnicodeDirs, GString); - deleteGHash(displayFonts, DisplayFontParam); - deleteGHash(displayCIDFonts, DisplayFontParam); - deleteGHash(displayNamedCIDFonts, DisplayFontParam); -#ifdef WIN32 - if (winFontList) { - delete winFontList; - } -#endif - if (psFile) { - delete psFile; - } - deleteGHash(psFonts, PSFontParam); - deleteGList(psNamedFonts16, PSFontParam); - deleteGList(psFonts16, PSFontParam); - delete textEncoding; - deleteGList(fontDirs, GString); - delete initialZoom; - if (launchCommand) { - delete launchCommand; - } - if (urlCommand) { - delete urlCommand; - } - if (movieCommand) { - delete movieCommand; - } - deleteGList(keyBindings, KeyBinding); - - cMapDirs->startIter(&iter); - while (cMapDirs->getNext(&iter, &key, (void **)&list)) { - deleteGList(list, GString); - } - delete cMapDirs; - - delete cidToUnicodeCache; - delete unicodeToUnicodeCache; - delete unicodeMapCache; - delete cMapCache; - -#ifdef ENABLE_PLUGINS - delete securityHandlers; - deleteGList(plugins, Plugin); -#endif - -#if MULTITHREADED - gDestroyMutex(&mutex); - gDestroyMutex(&unicodeMapCacheMutex); - gDestroyMutex(&cMapCacheMutex); -#endif -} - -//------------------------------------------------------------------------ - -void GlobalParams::setBaseDir(char *dir) { - delete baseDir; - baseDir = new GString(dir); -} - -void GlobalParams::setupBaseFonts(char *dir) { - GString *fontName; - GString *fileName; -#ifdef WIN32 - HMODULE shell32Lib; - BOOL (__stdcall *SHGetSpecialFolderPathFunc)(HWND hwndOwner, - LPTSTR lpszPath, - int nFolder, - BOOL fCreate); - char winFontDir[MAX_PATH]; -#endif - FILE *f; - DisplayFontParamKind kind; - DisplayFontParam *dfp; - int i, j; - -#ifdef WIN32 - // SHGetSpecialFolderPath isn't available in older versions of - // shell32.dll (Win95 and WinNT4), so do a dynamic load - winFontDir[0] = '\0'; - if ((shell32Lib = LoadLibrary("shell32.dll"))) { - if ((SHGetSpecialFolderPathFunc = - (BOOL (__stdcall *)(HWND hwndOwner, LPTSTR lpszPath, - int nFolder, BOOL fCreate)) - GetProcAddress(shell32Lib, "SHGetSpecialFolderPathA"))) { - if (!(*SHGetSpecialFolderPathFunc)(NULL, winFontDir, - CSIDL_FONTS, FALSE)) { - winFontDir[0] = '\0'; - } - } - } -#endif - for (i = 0; displayFontTab[i].name; ++i) { - fontName = new GString(displayFontTab[i].name); - if (getDisplayFont(fontName)) { - delete fontName; - continue; - } - fileName = NULL; - kind = displayFontT1; // make gcc happy - if (dir) { - fileName = appendToPath(new GString(dir), displayFontTab[i].t1FileName); - kind = displayFontT1; - if ((f = fopen(fileName->getCString(), "rb"))) { - fclose(f); - } else { - delete fileName; - fileName = NULL; - } - } -#ifdef WIN32 - if (!fileName && winFontDir[0] && displayFontTab[i].ttFileName) { - fileName = appendToPath(new GString(winFontDir), - displayFontTab[i].ttFileName); - kind = displayFontTT; - if ((f = fopen(fileName->getCString(), "rb"))) { - fclose(f); - } else { - delete fileName; - fileName = NULL; - } - } - // SHGetSpecialFolderPath(CSIDL_FONTS) doesn't work on Win 2k Server - // or Win2003 Server, or with older versions of shell32.dll, so check - // the "standard" directories - if (displayFontTab[i].ttFileName) { - for (j = 0; !fileName && displayFontDirs[j]; ++j) { - fileName = appendToPath(new GString(displayFontDirs[j]), - displayFontTab[i].ttFileName); - kind = displayFontTT; - if ((f = fopen(fileName->getCString(), "rb"))) { - fclose(f); - } else { - delete fileName; - fileName = NULL; - } - } - } -#else - for (j = 0; !fileName && displayFontDirs[j]; ++j) { - fileName = appendToPath(new GString(displayFontDirs[j]), - displayFontTab[i].t1FileName); - kind = displayFontT1; - if ((f = fopen(fileName->getCString(), "rb"))) { - fclose(f); - } else { - delete fileName; - fileName = NULL; - } - } -#endif - if (!fileName) { - error(errConfig, -1, "No display font for '{0:s}'", - displayFontTab[i].name); - delete fontName; - continue; - } - dfp = new DisplayFontParam(fontName, kind); - dfp->t1.fileName = fileName; - globalParams->addDisplayFont(dfp); - } - -#ifdef WIN32 - if (winFontDir[0]) { - winFontList = new WinFontList(winFontDir); - } -#endif -} - -//------------------------------------------------------------------------ -// accessors -//------------------------------------------------------------------------ - -CharCode GlobalParams::getMacRomanCharCode(char *charName) { - // no need to lock - macRomanReverseMap is constant - return macRomanReverseMap->lookup(charName); -} - -GString *GlobalParams::getBaseDir() { - GString *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(GString *encodingName) { - UnicodeMap *map; - - lockGlobalParams; - map = (UnicodeMap *)residentUnicodeMaps->lookup(encodingName); - unlockGlobalParams; - if (map) { - map->incRefCnt(); - } - return map; -} - -FILE *GlobalParams::getUnicodeMapFile(GString *encodingName) { - GString *fileName; - FILE *f; - - lockGlobalParams; - if ((fileName = (GString *)unicodeMaps->lookup(encodingName))) { - f = openFile(fileName->getCString(), "r"); - } else { - f = NULL; - } - unlockGlobalParams; - return f; -} - -FILE *GlobalParams::findCMapFile(GString *collection, GString *cMapName) { - GList *list; - GString *dir; - GString *fileName; - FILE *f; - int i; - - lockGlobalParams; - if (!(list = (GList *)cMapDirs->lookup(collection))) { - unlockGlobalParams; - return NULL; - } - for (i = 0; i < list->getLength(); ++i) { - dir = (GString *)list->get(i); - fileName = appendToPath(dir->copy(), cMapName->getCString()); - f = openFile(fileName->getCString(), "r"); - delete fileName; - if (f) { - unlockGlobalParams; - return f; - } - } - unlockGlobalParams; - return NULL; -} - -FILE *GlobalParams::findToUnicodeFile(GString *name) { - GString *dir, *fileName; - FILE *f; - int i; - - lockGlobalParams; - for (i = 0; i < toUnicodeDirs->getLength(); ++i) { - dir = (GString *)toUnicodeDirs->get(i); - fileName = appendToPath(dir->copy(), name->getCString()); - f = openFile(fileName->getCString(), "r"); - delete fileName; - if (f) { - unlockGlobalParams; - return f; - } - } - unlockGlobalParams; - return NULL; -} - -DisplayFontParam *GlobalParams::getDisplayFont(GString *fontName) { - DisplayFontParam *dfp; - - lockGlobalParams; - dfp = (DisplayFontParam *)displayFonts->lookup(fontName); -#ifdef WIN32 - if (!dfp && winFontList) { - dfp = winFontList->find(fontName); - } -#endif - unlockGlobalParams; - return dfp; -} - -DisplayFontParam *GlobalParams::getDisplayCIDFont(GString *fontName, - GString *collection) { - DisplayFontParam *dfp; - - lockGlobalParams; - if (!fontName || - !(dfp = (DisplayFontParam *)displayNamedCIDFonts->lookup(fontName))) { - dfp = (DisplayFontParam *)displayCIDFonts->lookup(collection); - } - unlockGlobalParams; - return dfp; -} - -GString *GlobalParams::getPSFile() { - GString *s; - - lockGlobalParams; - s = psFile ? psFile->copy() : (GString *)NULL; - unlockGlobalParams; - return s; -} - -int GlobalParams::getPSPaperWidth() { - int w; - - lockGlobalParams; - w = psPaperWidth; - unlockGlobalParams; - return w; -} - -int GlobalParams::getPSPaperHeight() { - int h; - - lockGlobalParams; - h = psPaperHeight; - unlockGlobalParams; - return h; -} - -void GlobalParams::getPSImageableArea(int *llx, int *lly, int *urx, int *ury) { - lockGlobalParams; - *llx = psImageableLLX; - *lly = psImageableLLY; - *urx = psImageableURX; - *ury = psImageableURY; - unlockGlobalParams; -} - -GBool GlobalParams::getPSCrop() { - GBool f; - - lockGlobalParams; - f = psCrop; - unlockGlobalParams; - return f; -} - -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; -} - -GBool GlobalParams::getPSDuplex() { - GBool d; - - lockGlobalParams; - d = psDuplex; - unlockGlobalParams; - return d; -} - -PSLevel GlobalParams::getPSLevel() { - PSLevel level; - - lockGlobalParams; - level = psLevel; - unlockGlobalParams; - return level; -} - -PSFontParam *GlobalParams::getPSFont(GString *fontName) { - PSFontParam *p; - - lockGlobalParams; - p = (PSFontParam *)psFonts->lookup(fontName); - unlockGlobalParams; - return p; -} - -GList *GlobalParams::getPSFontNames() { - GList *names; - GHashIter *iter; - GString *name; - PSFontParam *p; - - names = new GList(); - lockGlobalParams; - psFonts->startIter(&iter); - while (psFonts->getNext(&iter, &name, (void **)&p)) { - names->append(name->copy()); - } - unlockGlobalParams; - return names; -} - -PSFontParam *GlobalParams::getPSFont16(GString *fontName, - GString *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::getPSFontPassthrough() { - GBool e; - - lockGlobalParams; - e = psFontPassthrough; - 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::getPSUncompressPreloadedImages() { - GBool ah; - - lockGlobalParams; - ah = psUncompressPreloadedImages; - unlockGlobalParams; - return ah; -} - -double GlobalParams::getPSRasterResolution() { - double res; - - lockGlobalParams; - res = psRasterResolution; - unlockGlobalParams; - return res; -} - -GBool GlobalParams::getPSRasterMono() { - GBool mono; - - lockGlobalParams; - mono = psRasterMono; - unlockGlobalParams; - return mono; -} - -GString *GlobalParams::getTextEncodingName() { - GString *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; -} - -GString *GlobalParams::findFontFile(GString *fontName, char **exts) { - GString *dir, *fileName; -#ifdef WIN32 - GString *fontNameU; -#endif - char **ext; - FILE *f; - int i; - - lockGlobalParams; - for (i = 0; i < fontDirs->getLength(); ++i) { - dir = (GString *)fontDirs->get(i); - for (ext = exts; *ext; ++ext) { -#ifdef WIN32 - fontNameU = fileNameToUTF8(fontName->getCString()); - fileName = appendToPath(dir->copy(), fontNameU->getCString()); - delete fontNameU; -#else - fileName = appendToPath(dir->copy(), fontName->getCString()); -#endif - fileName->append(*ext); - if ((f = openFile(fileName->getCString(), "rb"))) { - fclose(f); - unlockGlobalParams; - return fileName; - } - delete fileName; - } - } - unlockGlobalParams; - return NULL; -} - -GString *GlobalParams::getInitialZoom() { - GString *s; - - lockGlobalParams; - s = initialZoom->copy(); - unlockGlobalParams; - return s; -} - -GBool GlobalParams::getContinuousView() { - GBool f; - - lockGlobalParams; - f = continuousView; - unlockGlobalParams; - return f; -} - -GBool GlobalParams::getEnableT1lib() { - GBool f; - - lockGlobalParams; - f = enableT1lib; - unlockGlobalParams; - return f; -} - -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::getDrawAnnotations() { - GBool draw; - - lockGlobalParams; - draw = drawAnnotations; - unlockGlobalParams; - return draw; -} - -GBool GlobalParams::getMapNumericCharNames() { - GBool map; - - lockGlobalParams; - map = mapNumericCharNames; - unlockGlobalParams; - return map; -} - -GBool GlobalParams::getMapUnknownCharNames() { - GBool map; - - lockGlobalParams; - map = mapUnknownCharNames; - unlockGlobalParams; - return map; -} - -GList *GlobalParams::getKeyBinding(int code, int mods, int context) { - KeyBinding *binding; - GList *cmds; - int modMask; - int i, j; - - lockGlobalParams; - cmds = NULL; - // for ASCII chars, ignore the shift modifier - modMask = code <= 0xff ? ~xpdfKeyModShift : ~0; - for (i = 0; i < keyBindings->getLength(); ++i) { - binding = (KeyBinding *)keyBindings->get(i); - if (binding->code == code && - (binding->mods & modMask) == (mods & modMask) && - (~binding->context | context) == ~0) { - cmds = new GList(); - for (j = 0; j < binding->cmds->getLength(); ++j) { - cmds->append(((GString *)binding->cmds->get(j))->copy()); - } - break; - } - } - unlockGlobalParams; - return cmds; -} - -GBool GlobalParams::getPrintCommands() { - GBool p; - - lockGlobalParams; - p = printCommands; - unlockGlobalParams; - return p; -} - -GBool GlobalParams::getErrQuiet() { - // no locking -- this function may get called from inside a locked - // section - return errQuiet; -} - -CharCodeToUnicode *GlobalParams::getCIDToUnicode(GString *collection) { - GString *fileName; - CharCodeToUnicode *ctu; - - lockGlobalParams; - if (!(ctu = cidToUnicodeCache->getCharCodeToUnicode(collection))) { - if ((fileName = (GString *)cidToUnicodes->lookup(collection)) && - (ctu = CharCodeToUnicode::parseCIDToUnicode(fileName, collection))) { - cidToUnicodeCache->add(ctu); - } - } - unlockGlobalParams; - return ctu; -} - -CharCodeToUnicode *GlobalParams::getUnicodeToUnicode(GString *fontName) { - CharCodeToUnicode *ctu; - GHashIter *iter; - GString *fontPattern, *fileName; - - lockGlobalParams; - fileName = NULL; - unicodeToUnicodes->startIter(&iter); - while (unicodeToUnicodes->getNext(&iter, &fontPattern, (void **)&fileName)) { - if (strstr(fontName->getCString(), fontPattern->getCString())) { - unicodeToUnicodes->killIter(&iter); - break; - } - fileName = NULL; - } - if (fileName) { - if (!(ctu = unicodeToUnicodeCache->getCharCodeToUnicode(fileName))) { - if ((ctu = CharCodeToUnicode::parseUnicodeToUnicode(fileName))) { - unicodeToUnicodeCache->add(ctu); - } - } - } else { - ctu = NULL; - } - unlockGlobalParams; - return ctu; -} - -UnicodeMap *GlobalParams::getUnicodeMap(GString *encodingName) { - return getUnicodeMap2(encodingName); -} - -UnicodeMap *GlobalParams::getUnicodeMap2(GString *encodingName) { - UnicodeMap *map; - - if (!(map = getResidentUnicodeMap(encodingName))) { - lockUnicodeMapCache; - map = unicodeMapCache->getUnicodeMap(encodingName); - unlockUnicodeMapCache; - } - return map; -} - -CMap *GlobalParams::getCMap(GString *collection, GString *cMapName) { - CMap *cMap; - - lockCMapCache; - cMap = cMapCache->getCMap(collection, cMapName); - unlockCMapCache; - return cMap; -} - -UnicodeMap *GlobalParams::getTextEncoding() { - return getUnicodeMap2(textEncoding); -} - -//------------------------------------------------------------------------ -// functions to set parameters -//------------------------------------------------------------------------ - -void GlobalParams::addDisplayFont(DisplayFontParam *param) { - DisplayFontParam *old; - - lockGlobalParams; - if ((old = (DisplayFontParam *)displayFonts->remove(param->name))) { - delete old; - } - displayFonts->add(param->name, param); - unlockGlobalParams; -} - -void GlobalParams::setPSFile(char *file) { - lockGlobalParams; - if (psFile) { - delete psFile; - } - psFile = new GString(file); - unlockGlobalParams; -} - -GBool GlobalParams::setPSPaperSize(char *size) { - lockGlobalParams; - if (!strcmp(size, "match")) { - psPaperWidth = psPaperHeight = -1; - } else if (!strcmp(size, "letter")) { - psPaperWidth = 612; - psPaperHeight = 792; - } else if (!strcmp(size, "legal")) { - psPaperWidth = 612; - psPaperHeight = 1008; - } else if (!strcmp(size, "A4")) { - psPaperWidth = 595; - psPaperHeight = 842; - } else if (!strcmp(size, "A3")) { - psPaperWidth = 842; - psPaperHeight = 1190; - } else { - unlockGlobalParams; - return gFalse; - } - psImageableLLX = psImageableLLY = 0; - psImageableURX = psPaperWidth; - psImageableURY = psPaperHeight; - unlockGlobalParams; - return gTrue; -} - -void GlobalParams::setPSPaperWidth(int width) { - lockGlobalParams; - psPaperWidth = width; - psImageableLLX = 0; - psImageableURX = psPaperWidth; - unlockGlobalParams; -} - -void GlobalParams::setPSPaperHeight(int height) { - lockGlobalParams; - psPaperHeight = height; - psImageableLLY = 0; - psImageableURY = psPaperHeight; - unlockGlobalParams; -} - -void GlobalParams::setPSImageableArea(int llx, int lly, int urx, int ury) { - lockGlobalParams; - psImageableLLX = llx; - psImageableLLY = lly; - psImageableURX = urx; - psImageableURY = ury; - unlockGlobalParams; -} - -void GlobalParams::setPSCrop(GBool crop) { - lockGlobalParams; - psCrop = crop; - unlockGlobalParams; -} - -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::setPSDuplex(GBool duplex) { - lockGlobalParams; - psDuplex = duplex; - 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::setPSFontPassthrough(GBool passthrough) { - lockGlobalParams; - psFontPassthrough = passthrough; - 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::setTextEncoding(char *encodingName) { - lockGlobalParams; - delete textEncoding; - textEncoding = new GString(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; -} - -void GlobalParams::setInitialZoom(char *s) { - lockGlobalParams; - delete initialZoom; - initialZoom = new GString(s); - unlockGlobalParams; -} - -void GlobalParams::setContinuousView(GBool cont) { - lockGlobalParams; - continuousView = cont; - unlockGlobalParams; -} - -GBool GlobalParams::setEnableT1lib(char *s) { - GBool ok; - - lockGlobalParams; - ok = parseYesNo2(s, &enableT1lib); - unlockGlobalParams; - return ok; -} - -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::setScreenType(ScreenType t) { - lockGlobalParams; - screenType = t; - unlockGlobalParams; -} - -void GlobalParams::setScreenSize(int size) { - lockGlobalParams; - screenSize = size; - unlockGlobalParams; -} - -void GlobalParams::setScreenDotRadius(int r) { - lockGlobalParams; - screenDotRadius = r; - unlockGlobalParams; -} - -void GlobalParams::setScreenGamma(double gamma) { - lockGlobalParams; - screenGamma = gamma; - unlockGlobalParams; -} - -void GlobalParams::setScreenBlackThreshold(double thresh) { - lockGlobalParams; - screenBlackThreshold = thresh; - unlockGlobalParams; -} - -void GlobalParams::setScreenWhiteThreshold(double thresh) { - lockGlobalParams; - screenWhiteThreshold = thresh; - 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::setErrQuiet(GBool errQuietA) { - lockGlobalParams; - errQuiet = errQuietA; - 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; - } - - lockGlobalParams; - for (i = 0; i < securityHandlers->getLength(); ++i) { - hdlr = (XpdfSecurityHandler *)securityHandlers->get(i); - if (!strcmp(hdlr->name, name)) { - unlockGlobalParams; - return hdlr; - } - } - unlockGlobalParams; -#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/thirdparty/xpdf/3.02/src/xpdf/GlobalParams.h b/thirdparty/xpdf/3.02/src/xpdf/GlobalParams.h deleted file mode 100644 index efe3c479..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/GlobalParams.h +++ /dev/null @@ -1,485 +0,0 @@ -//======================================================================== -// -// GlobalParams.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef GLOBALPARAMS_H -#define GLOBALPARAMS_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" -#include "CharTypes.h" - -#if MULTITHREADED -#include "GMutex.h" -#endif - -class GString; -class GList; -class GHash; -class NameToCharCode; -class CharCodeToUnicode; -class CharCodeToUnicodeCache; -class UnicodeMap; -class UnicodeMapCache; -class CMap; -class CMapCache; -struct XpdfSecurityHandler; -class GlobalParams; -#ifdef WIN32 -class WinFontList; -#endif - -//------------------------------------------------------------------------ - -// The global parameters object. -extern GlobalParams *globalParams; - -//------------------------------------------------------------------------ - -enum DisplayFontParamKind { - displayFontT1, - displayFontTT -}; - -struct DisplayFontParamT1 { - GString *fileName; -}; - -struct DisplayFontParamTT { - GString *fileName; -}; - -class DisplayFontParam { -public: - - GString *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(GString *nameA, DisplayFontParamKind kindA); - virtual ~DisplayFontParam(); -}; - -//------------------------------------------------------------------------ - -class PSFontParam { -public: - - GString *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 - GString *psFontName; // PostScript font name - GString *encoding; // encoding, for 16-bit fonts only - - PSFontParam(GString *pdfFontNameA, int wModeA, - GString *psFontNameA, GString *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 KeyBinding { -public: - - int code; // 0x20 .. 0xfe = ASCII, - // >=0x10000 = special keys, mouse buttons, - // etc. (xpdfKeyCode* symbols) - int mods; // modifiers (xpdfKeyMod* symbols, or-ed - // together) - int context; // context (xpdfKeyContext* symbols, or-ed - // together) - GList *cmds; // list of commands [GString] - - KeyBinding(int codeA, int modsA, int contextA, char *cmd0); - KeyBinding(int codeA, int modsA, int contextA, char *cmd0, char *cmd1); - KeyBinding(int codeA, int modsA, int contextA, GList *cmdsA); - ~KeyBinding(); -}; - -#define xpdfKeyCodeTab 0x1000 -#define xpdfKeyCodeReturn 0x1001 -#define xpdfKeyCodeEnter 0x1002 -#define xpdfKeyCodeBackspace 0x1003 -#define xpdfKeyCodeInsert 0x1004 -#define xpdfKeyCodeDelete 0x1005 -#define xpdfKeyCodeHome 0x1006 -#define xpdfKeyCodeEnd 0x1007 -#define xpdfKeyCodePgUp 0x1008 -#define xpdfKeyCodePgDn 0x1009 -#define xpdfKeyCodeLeft 0x100a -#define xpdfKeyCodeRight 0x100b -#define xpdfKeyCodeUp 0x100c -#define xpdfKeyCodeDown 0x100d -#define xpdfKeyCodeF1 0x1100 -#define xpdfKeyCodeF35 0x1122 -#define xpdfKeyCodeMousePress1 0x2001 -#define xpdfKeyCodeMousePress2 0x2002 -#define xpdfKeyCodeMousePress3 0x2003 -#define xpdfKeyCodeMousePress4 0x2004 -#define xpdfKeyCodeMousePress5 0x2005 -#define xpdfKeyCodeMousePress6 0x2006 -#define xpdfKeyCodeMousePress7 0x2007 -// ... -#define xpdfKeyCodeMousePress32 0x2020 -#define xpdfKeyCodeMouseRelease1 0x2101 -#define xpdfKeyCodeMouseRelease2 0x2102 -#define xpdfKeyCodeMouseRelease3 0x2103 -#define xpdfKeyCodeMouseRelease4 0x2104 -#define xpdfKeyCodeMouseRelease5 0x2105 -#define xpdfKeyCodeMouseRelease6 0x2106 -#define xpdfKeyCodeMouseRelease7 0x2107 -// ... -#define xpdfKeyCodeMouseRelease32 0x2120 -#define xpdfKeyModNone 0 -#define xpdfKeyModShift (1 << 0) -#define xpdfKeyModCtrl (1 << 1) -#define xpdfKeyModAlt (1 << 2) -#define xpdfKeyContextAny 0 -#define xpdfKeyContextFullScreen (1 << 0) -#define xpdfKeyContextWindow (2 << 0) -#define xpdfKeyContextContinuous (1 << 2) -#define xpdfKeyContextSinglePage (2 << 2) -#define xpdfKeyContextOverLink (1 << 4) -#define xpdfKeyContextOffLink (2 << 4) -#define xpdfKeyContextOutline (1 << 6) -#define xpdfKeyContextMainWin (2 << 6) -#define xpdfKeyContextScrLockOn (1 << 8) -#define xpdfKeyContextScrLockOff (2 << 8) - -//------------------------------------------------------------------------ - -class GlobalParams { -public: - - // Initialize the global parameters by attempting to read a config - // file. - GlobalParams(char *cfgFileName); - - ~GlobalParams(); - - void setBaseDir(char *dir); - void setupBaseFonts(char *dir); - - void parseLine(char *buf, GString *fileName, int line); - - //----- accessors - - CharCode getMacRomanCharCode(char *charName); - - GString *getBaseDir(); - Unicode mapNameToUnicode(char *charName); - UnicodeMap *getResidentUnicodeMap(GString *encodingName); - FILE *getUnicodeMapFile(GString *encodingName); - FILE *findCMapFile(GString *collection, GString *cMapName); - FILE *findToUnicodeFile(GString *name); - DisplayFontParam *getDisplayFont(GString *fontName); - DisplayFontParam *getDisplayCIDFont(GString *fontName, GString *collection); - GString *getPSFile(); - int getPSPaperWidth(); - int getPSPaperHeight(); - void getPSImageableArea(int *llx, int *lly, int *urx, int *ury); - GBool getPSDuplex(); - GBool getPSCrop(); - GBool getPSExpandSmaller(); - GBool getPSShrinkLarger(); - GBool getPSCenter(); - PSLevel getPSLevel(); - PSFontParam *getPSFont(GString *fontName); - GList *getPSFontNames(); - PSFontParam *getPSFont16(GString *fontName, GString *collection, int wMode); - GBool getPSEmbedType1(); - GBool getPSEmbedTrueType(); - GBool getPSEmbedCIDPostScript(); - GBool getPSEmbedCIDTrueType(); - GBool getPSFontPassthrough(); - GBool getPSPreload(); - GBool getPSOPI(); - GBool getPSASCIIHex(); - GBool getPSUncompressPreloadedImages(); - double getPSRasterResolution(); - GBool getPSRasterMono(); - GString *getTextEncodingName(); - EndOfLineKind getTextEOL(); - GBool getTextPageBreaks(); - GBool getTextKeepTinyChars(); - GString *findFontFile(GString *fontName, char **exts); - GString *getInitialZoom(); - GBool getContinuousView(); - GBool getEnableT1lib(); - GBool getEnableFreeType(); - GBool getAntialias(); - GBool getVectorAntialias(); - GBool getStrokeAdjust(); - ScreenType getScreenType(); - int getScreenSize(); - int getScreenDotRadius(); - double getScreenGamma(); - double getScreenBlackThreshold(); - double getScreenWhiteThreshold(); - GBool getDrawAnnotations(); - GBool getOverprintPreview() { return overprintPreview; } - GString *getLaunchCommand() { return launchCommand; } - GString *getURLCommand() { return urlCommand; } - GString *getMovieCommand() { return movieCommand; } - GBool getMapNumericCharNames(); - GBool getMapUnknownCharNames(); - GList *getKeyBinding(int code, int mods, int context); - GBool getPrintCommands(); - GBool getErrQuiet(); - - CharCodeToUnicode *getCIDToUnicode(GString *collection); - CharCodeToUnicode *getUnicodeToUnicode(GString *fontName); - UnicodeMap *getUnicodeMap(GString *encodingName); - CMap *getCMap(GString *collection, GString *cMapName); - UnicodeMap *getTextEncoding(); - - //----- functions to set parameters - - void addDisplayFont(DisplayFontParam *param); - void setPSFile(char *file); - GBool setPSPaperSize(char *size); - void setPSPaperWidth(int width); - void setPSPaperHeight(int height); - void setPSImageableArea(int llx, int lly, int urx, int ury); - void setPSDuplex(GBool duplex); - void setPSCrop(GBool crop); - 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 setPSFontPassthrough(GBool passthrough); - void setPSPreload(GBool preload); - void setPSOPI(GBool opi); - void setPSASCIIHex(GBool hex); - void setTextEncoding(char *encodingName); - GBool setTextEOL(char *s); - void setTextPageBreaks(GBool pageBreaks); - void setTextKeepTinyChars(GBool keep); - void setInitialZoom(char *s); - void setContinuousView(GBool cont); - GBool setEnableT1lib(char *s); - GBool setEnableFreeType(char *s); - GBool setAntialias(char *s); - GBool setVectorAntialias(char *s); - void setScreenType(ScreenType t); - void setScreenSize(int size); - void setScreenDotRadius(int r); - void setScreenGamma(double gamma); - void setScreenBlackThreshold(double thresh); - void setScreenWhiteThreshold(double thresh); - void setMapNumericCharNames(GBool map); - void setMapUnknownCharNames(GBool map); - void setPrintCommands(GBool printCommandsA); - void setErrQuiet(GBool errQuietA); - - //----- security handlers - - void addSecurityHandler(XpdfSecurityHandler *handler); - XpdfSecurityHandler *getSecurityHandler(char *name); - -private: - - void createDefaultKeyBindings(); - void parseFile(GString *fileName, FILE *f); - void parseNameToUnicode(GList *tokens, GString *fileName, int line); - void parseCIDToUnicode(GList *tokens, GString *fileName, int line); - void parseUnicodeToUnicode(GList *tokens, GString *fileName, int line); - void parseUnicodeMap(GList *tokens, GString *fileName, int line); - void parseCMapDir(GList *tokens, GString *fileName, int line); - void parseToUnicodeDir(GList *tokens, GString *fileName, int line); - void parseDisplayFont(GList *tokens, GHash *fontHash, - DisplayFontParamKind kind, - GString *fileName, int line); - void parsePSFile(GList *tokens, GString *fileName, int line); - void parsePSPaperSize(GList *tokens, GString *fileName, int line); - void parsePSImageableArea(GList *tokens, GString *fileName, int line); - void parsePSLevel(GList *tokens, GString *fileName, int line); - void parsePSFont(GList *tokens, GString *fileName, int line); - void parsePSFont16(char *cmdName, GList *fontList, - GList *tokens, GString *fileName, int line); - void parseTextEncoding(GList *tokens, GString *fileName, int line); - void parseTextEOL(GList *tokens, GString *fileName, int line); - void parseFontDir(GList *tokens, GString *fileName, int line); - void parseInitialZoom(GList *tokens, GString *fileName, int line); - void parseScreenType(GList *tokens, GString *fileName, int line); - void parseBind(GList *tokens, GString *fileName, int line); - void parseUnbind(GList *tokens, GString *fileName, int line); - GBool parseKey(GString *modKeyStr, GString *contextStr, - int *code, int *mods, int *context, - char *cmdName, - GList *tokens, GString *fileName, int line); - void parseCommand(char *cmdName, GString **val, - GList *tokens, GString *fileName, int line); - void parseYesNo(char *cmdName, GBool *flag, - GList *tokens, GString *fileName, int line); - GBool parseYesNo2(char *token, GBool *flag); - void parseInteger(char *cmdName, int *val, - GList *tokens, GString *fileName, int line); - void parseFloat(char *cmdName, double *val, - GList *tokens, GString *fileName, int line); - UnicodeMap *getUnicodeMap2(GString *encodingName); -#ifdef ENABLE_PLUGINS - GBool loadPlugin(char *type, char *name); -#endif - - //----- static tables - - NameToCharCode * // mapping from char name to - macRomanReverseMap; // MacRomanEncoding index - - //----- user-modifiable settings - - GString *baseDir; // base directory - for plugins, etc. - NameToCharCode * // mapping from char name to Unicode - nameToUnicode; - GHash *cidToUnicodes; // files for mappings from char collections - // to Unicode, indexed by collection name - // [GString] - GHash *unicodeToUnicodes; // files for Unicode-to-Unicode mappings, - // indexed by font name pattern [GString] - GHash *residentUnicodeMaps; // mappings from Unicode to char codes, - // indexed by encoding name [UnicodeMap] - GHash *unicodeMaps; // files for mappings from Unicode to char - // codes, indexed by encoding name [GString] - GHash *cMapDirs; // list of CMap dirs, indexed by collection - // name [GList[GString]] - GList *toUnicodeDirs; // list of ToUnicode CMap dirs [GString] - GHash *displayFonts; // display font info, indexed by font name - // [DisplayFontParam] -#ifdef WIN32 - WinFontList *winFontList; // system TrueType fonts -#endif - GHash *displayCIDFonts; // display CID font info, indexed by - // collection [DisplayFontParam] - GHash *displayNamedCIDFonts; // display CID font info, indexed by - // font name [DisplayFontParam] - GString *psFile; // PostScript file or command (for xpdf) - int psPaperWidth; // paper size, in PostScript points, for - int psPaperHeight; // PostScript output - int psImageableLLX, // imageable area, in PostScript points, - psImageableLLY, // for PostScript output - psImageableURX, - psImageableURY; - GBool psCrop; // crop PS output to CropBox - GBool psExpandSmaller; // expand smaller pages to fill paper - GBool psShrinkLarger; // shrink larger pages to fit paper - GBool psCenter; // center pages on the paper - GBool psDuplex; // enable duplexing in PostScript? - PSLevel psLevel; // PostScript level to generate - GHash *psFonts; // PostScript font info, indexed by PDF - // font name [PSFontParam] - GList *psNamedFonts16; // named 16-bit fonts [PSFontParam] - GList *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 psFontPassthrough; // pass all fonts through as-is? - GBool psPreload; // preload PostScript images and forms into - // memory - GBool psOPI; // generate PostScript OPI comments? - GBool psASCIIHex; // use ASCIIHex instead of ASCII85? - GBool psUncompressPreloadedImages; // uncompress all preloaded images - double psRasterResolution; // PostScript rasterization resolution (dpi) - GBool psRasterMono; // true to do PostScript rasterization - // in monochrome (gray); false to do it - // in color (RGB/CMYK) - GString *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 - GList *fontDirs; // list of font dirs [GString] - GString *initialZoom; // initial zoom level - GBool continuousView; // continuous view mode - GBool enableT1lib; // t1lib enable flag - GBool enableFreeType; // FreeType enable flag - GBool antialias; // font 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 drawAnnotations; // draw annotations or not - GBool overprintPreview; // enable overprint preview - GString *launchCommand; // command executed for 'launch' links - GString *urlCommand; // command executed for URL links - GString *movieCommand; // command executed for movie annotations - GBool mapNumericCharNames; // map numeric char names (from font subsets)? - GBool mapUnknownCharNames; // map unknown char names? - GList *keyBindings; // key & mouse button bindings [KeyBinding] - GBool printCommands; // print the drawing commands - GBool errQuiet; // suppress error messages? - - 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 - GMutex mutex; - GMutex unicodeMapCacheMutex; - GMutex cMapCacheMutex; -#endif -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.cc deleted file mode 100644 index 41e781d3..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.cc +++ /dev/null @@ -1,203 +0,0 @@ -//======================================================================== -// -// ImageOutputDev.cc -// -// Copyright 1998-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include "gmem.h" -#include "config.h" -#include "Error.h" -#include "GfxState.h" -#include "Object.h" -#include "Stream.h" -#include "ImageOutputDev.h" - -ImageOutputDev::ImageOutputDev(char *fileRootA, GBool dumpJPEGA) { - fileRoot = copyString(fileRootA); - fileName = (char *)gmalloc(strlen(fileRoot) + 20); - dumpJPEG = dumpJPEGA; - imgNum = 0; - ok = gTrue; -} - -ImageOutputDev::~ImageOutputDev() { - gfree(fileName); - gfree(fileRoot); -} - -void ImageOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - // do nothing -- this avoids the potentially slow loop in Gfx.cc -} - -void ImageOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg) { - FILE *f; - int c; - int size, i; - - // dump JPEG file - if (dumpJPEG && str->getKind() == strDCT && !inlineImg) { - - // open the image file - sprintf(fileName, "%s-%03d.jpg", fileRoot, imgNum); - ++imgNum; - if (!(f = fopen(fileName, "wb"))) { - error(errIO, -1, "Couldn't open image file '{0:s}'", fileName); - return; - } - - // initialize stream - str = ((DCTStream *)str)->getRawStream(); - str->reset(); - - // copy the stream - while ((c = str->getChar()) != EOF) - fputc(c, f); - - str->close(); - fclose(f); - - // dump PBM file - } else { - - // open the image file and write the PBM header - sprintf(fileName, "%s-%03d.pbm", fileRoot, imgNum); - ++imgNum; - if (!(f = fopen(fileName, "wb"))) { - error(errIO, -1, "Couldn't open image file '{0:s}'", fileName); - return; - } - fprintf(f, "P4\n"); - fprintf(f, "%d %d\n", width, height); - - // initialize stream - str->reset(); - - // copy the stream - size = height * ((width + 7) / 8); - for (i = 0; i < size; ++i) { - fputc(str->getChar(), f); - } - - str->close(); - fclose(f); - } -} - -void ImageOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg) { - FILE *f; - ImageStream *imgStr; - Guchar *p; - GfxRGB rgb; - int x, y; - int c; - int size, i; - - // dump JPEG file - if (dumpJPEG && str->getKind() == strDCT && - (colorMap->getNumPixelComps() == 1 || - colorMap->getNumPixelComps() == 3) && - !inlineImg) { - - // open the image file - sprintf(fileName, "%s-%03d.jpg", fileRoot, imgNum); - ++imgNum; - if (!(f = fopen(fileName, "wb"))) { - error(errIO, -1, "Couldn't open image file '{0:s}'", fileName); - return; - } - - // initialize stream - str = ((DCTStream *)str)->getRawStream(); - str->reset(); - - // copy the stream - while ((c = str->getChar()) != EOF) - fputc(c, f); - - str->close(); - fclose(f); - - // dump PBM file - } else if (colorMap->getNumPixelComps() == 1 && - colorMap->getBits() == 1) { - - // open the image file and write the PBM header - sprintf(fileName, "%s-%03d.pbm", fileRoot, imgNum); - ++imgNum; - if (!(f = fopen(fileName, "wb"))) { - error(errIO, -1, "Couldn't open image file '{0:s}'", fileName); - return; - } - fprintf(f, "P4\n"); - fprintf(f, "%d %d\n", width, height); - - // initialize stream - str->reset(); - - // copy the stream - size = height * ((width + 7) / 8); - for (i = 0; i < size; ++i) { - fputc(str->getChar() ^ 0xff, f); - } - - str->close(); - fclose(f); - - // dump PPM file - } else { - - // open the image file and write the PPM header - sprintf(fileName, "%s-%03d.ppm", fileRoot, imgNum); - ++imgNum; - if (!(f = fopen(fileName, "wb"))) { - error(errIO, -1, "Couldn't open image file '{0:s}'", fileName); - return; - } - fprintf(f, "P6\n"); - fprintf(f, "%d %d\n", width, height); - fprintf(f, "255\n"); - - // initialize stream - imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), - colorMap->getBits()); - imgStr->reset(); - - // for each line... - for (y = 0; y < height; ++y) { - - // write the line - p = imgStr->getLine(); - for (x = 0; x < width; ++x) { - colorMap->getRGB(p, &rgb); - fputc(colToByte(rgb.r), f); - fputc(colToByte(rgb.g), f); - fputc(colToByte(rgb.b), f); - p += colorMap->getNumPixelComps(); - } - } - delete imgStr; - - fclose(f); - } -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.h deleted file mode 100644 index 5496225d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/ImageOutputDev.h +++ /dev/null @@ -1,88 +0,0 @@ -//======================================================================== -// -// ImageOutputDev.h -// -// Copyright 1998-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef IMAGEOUTPUTDEV_H -#define IMAGEOUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" -#include "OutputDev.h" - -class GfxState; - -//------------------------------------------------------------------------ -// ImageOutputDev -//------------------------------------------------------------------------ - -class ImageOutputDev: public OutputDev { -public: - - // Create an OutputDev which will write images to files named - // -NNN.. Normally, all images are written as PBM - // (.pbm) or PPM (.ppm) files. If is set, JPEG images are - // written as JPEG (.jpg) files. - ImageOutputDev(char *fileRootA, GBool dumpJPEGA); - - // Destructor. - virtual ~ImageOutputDev(); - - // Check if file was successfully created. - virtual GBool isOk() { return ok; } - - // 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 gFalse; } - - // Does this device need non-text content? - virtual GBool needNonText() { return gTrue; } - - //---- 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; } - - //----- path painting - virtual void tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - -private: - - char *fileRoot; // root of output file names - char *fileName; // buffer for output file names - GBool dumpJPEG; // set to dump native JPEG files - int imgNum; // current image number - GBool ok; // set up ok? -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.cc b/thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.cc deleted file mode 100644 index f128bb1b..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.cc +++ /dev/null @@ -1,353 +0,0 @@ -//======================================================================== -// -// JArithmeticDecoder.cc -// -// Copyright 2002-2004 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#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) { - Guint cAdd; - GBool prevFF; - int k, nBits; - - if (dataLen >= 0) { - dataLen = dataLenA; - } else if (dataLen == -1) { - dataLen = dataLenA; - buf1 = readByte(); - } else { - k = (-dataLen - 1) * 8 - ct; - dataLen = dataLenA; - cAdd = 0; - prevFF = gFalse; - while (k > 0) { - buf0 = readByte(); - if (prevFF) { - cAdd += 0xfe00 - (buf0 << 9); - nBits = 7; - } else { - cAdd += 0xff00 - (buf0 << 8); - nBits = 8; - } - prevFF = buf0 == 0xff; - if (k > nBits) { - cAdd <<= nBits; - k -= nBits; - } else { - cAdd <<= k; - ct = nBits - k; - k = 0; - } - } - c += cAdd; - 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) { - if (limitStream) { - buf0 = buf1; - buf1 = readByte(); - c = c + 0xff00 - (buf0 << 8); - } - 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/thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.h b/thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.h deleted file mode 100644 index a40823dd..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/JArithmeticDecoder.h +++ /dev/null @@ -1,109 +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 - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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 * 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/thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.cc b/thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.cc deleted file mode 100644 index bb50dbcf..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.cc +++ /dev/null @@ -1,3631 +0,0 @@ -//======================================================================== -// -// JBIG2Stream.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "GList.h" -#include "Error.h" -#include "JArithmeticDecoder.h" -#include "JBIG2Stream.h" - -//~ share these tables -#include "Stream-CCITT.h" - -//------------------------------------------------------------------------ - -static int contextSize[4] = { 16, 13, 10, 10 }; -static 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; -}; - -JBIG2HuffmanTable huffTableA[] = { - { 0, 1, 4, 0x000 }, - { 16, 2, 8, 0x002 }, - { 272, 3, 16, 0x006 }, - { 65808, 3, 32, 0x007 }, - { 0, 0, jbig2HuffmanEOT, 0 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 } -}; - -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 * 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() { - 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(errSyntaxError, str->getPos(), - "Bad two dim code in JBIG2 MMR stream"); - return EOF; - } - bufLen -= p->bits; - return p->n; -} - -int JBIG2MMRDecoder::getWhiteCode() { - 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(errSyntaxError, 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() { - 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(errSyntaxError, 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; } - -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) { - // force a call to gmalloc(-1), which will throw an exception - h = -1; - line = 2; - } - // 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) { - // force a call to gmalloc(-1), which will throw an exception - h = -1; - line = 2; - } - // 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); - slice->clearToZero(); - for (yy = 0; yy < hA; ++yy) { - for (xx = 0; xx < wA; ++xx) { - if (getPixel(x + xx, y + yy)) { - slice->setPixel(xx, yy); - } - } - } - return slice; -} - -void JBIG2Bitmap::expand(int newH, Guint pixel) { - if (newH <= h || line <= 0 || newH >= (INT_MAX - 1) / line) { - 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]; } - 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) -{ - Guint i; - - size = sizeA; - bitmaps = (JBIG2Bitmap **)gmallocn(size, sizeof(JBIG2Bitmap *)); - for (i = 0; i < size; ++i) { - bitmaps[i] = NULL; - } - genericRegionStats = NULL; - refinementRegionStats = NULL; -} - -JBIG2SymbolDict::~JBIG2SymbolDict() { - Guint i; - - for (i = 0; i < size; ++i) { - if (bitmaps[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 GList(); - 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 GList(); - 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) { - deleteGList(segments, JBIG2Segment); - segments = NULL; - } - if (globalSegments) { - deleteGList(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; -} - -GString *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 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; - } - - // check for missing page information segment - if (!pageBitmap && ((segType >= 4 && segType <= 7) || - (segType >= 20 && segType <= 43))) { - error(errSyntaxError, 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(errSyntaxError, getPos(), "Unknown segment type in JBIG2 stream"); - for (i = 0; i < segLength; ++i) { - if ((c1 = curStr->getChar()) == EOF) { - goto eofError2; - } - } - break; - } - - gfree(refSegs); - } - - return; - - syntaxError: - gfree(refSegs); - return; - - eofError2: - gfree(refSegs); - eofError1: - error(errSyntaxError, 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; - GList *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 GList(); - numInputSyms = 0; - for (i = 0; i < nRefSegs; ++i) { - if ((seg = findSegment(refSegs[i]))) { - if (seg->getType() == jbig2SegSymbolDict) { - j = ((JBIG2SymbolDict *)seg)->getSize(); - if (numInputSyms > UINT_MAX - j) { - error(errSyntaxError, getPos(), - "Too many input symbols in JBIG2 symbol dictionary"); - delete codeTables; - goto eofError; - } - numInputSyms += j; - } else if (seg->getType() == jbig2SegCodeTable) { - codeTables->append(seg); - } - } - } - if (numInputSyms > UINT_MAX - numNewSyms) { - error(errSyntaxError, getPos(), - "Too many input symbols in JBIG2 symbol dictionary"); - delete codeTables; - goto eofError; - } - - // compute symbol code length - symCodeLen = 0; - i = 1; - while (i < numInputSyms + numNewSyms) { - ++symCodeLen; - i <<= 1; - } - if (huff && symCodeLen == 0) { - symCodeLen = 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) { - if ((seg = findSegment(refSegs[i]))) { - if (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(errSyntaxError, 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(errSyntaxError, getPos(), - "Bad delta-height value in JBIG2 symbol dictionary"); - goto syntaxError; - } - symWidth += dw; - if (i >= numNewSyms) { - error(errSyntaxError, 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(errSyntaxError, 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); - - // 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(errSyntaxError, getPos(), - "Too many exported symbols in JBIG2 symbol dictionary"); - 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(errSyntaxError, getPos(), "Too few symbols in JBIG2 symbol dictionary"); - 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(errSyntaxError, 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(errSyntaxError, 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; - GList *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 GList(); - 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(errSyntaxError, getPos(), - "Invalid segment reference in JBIG2 text region"); - delete codeTables; - return; - } - } - symCodeLen = 0; - i = 1; - while (i < numSyms) { - ++symCodeLen; - i <<= 1; - } - if (huff && symCodeLen == 0) { - symCodeLen = 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); - - // 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(errSyntaxError, getPos(), "Missing code table in JBIG2 text region"); - gfree(codeTables); - delete syms; - return; - - eofError: - error(errSyntaxError, 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 (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 (1) { - - // 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(errSyntaxError, 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) { - if (huff) { - huffDecoder->decodeInt(&rdw, huffRDWTable); - huffDecoder->decodeInt(&rdh, huffRDHTable); - huffDecoder->decodeInt(&rdx, huffRDXTable); - huffDecoder->decodeInt(&rdy, huffRDYTable); - huffDecoder->decodeInt(&bmSize, huffRSizeTable); - huffDecoder->reset(); - arithDecoder->start(); - } else { - arithDecoder->decodeInt(&rdw, iardwStats); - arithDecoder->decodeInt(&rdh, iardhStats); - arithDecoder->decodeInt(&rdx, iardxStats); - arithDecoder->decodeInt(&rdy, iardyStats); - } - 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]; - } - - // 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; - } - } - - // 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); - - // 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(errSyntaxError, 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(errSyntaxError, getPos(), - "Bad bitmap size in JBIG2 halftone segment"); - return; - } - if (gridH == 0 || gridW >= INT_MAX / gridH) { - error(errSyntaxError, getPos(), "Bad grid size in JBIG2 halftone segment"); - return; - } - - // get pattern dictionary - if (nRefSegs != 1) { - error(errSyntaxError, getPos(), - "Bad symbol dictionary reference in JBIG2 halftone segment"); - return; - } - if (!(seg = findSegment(refSegs[0])) || - seg->getType() != jbig2SegPatternDict) { - error(errSyntaxError, 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(errSyntaxError, 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); - - // 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(errSyntaxError, 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(errSyntaxError, getPos(), - "JBIG2 MMR row is wrong length ({0: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(errSyntaxError, getPos(), - "JBIG2 MMR row is wrong length ({0:d})", a1); - a1 = w; - } - if ((*a0i & 1) ^ blackPixels) { - ++*a0i; - } - codingLine[*a0i] = a1; - } else if (a1 < codingLine[*a0i]) { - if (a1 < 0) { - error(errSyntaxError, 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, cxPtr1; - JBIG2BitmapPtr atPtr0, atPtr1, atPtr2, atPtr3; - int *refLine, *codingLine; - int code1, code2, code3; - int x, y, a0i, b1i, blackPixels, pix, i; - - bitmap = new JBIG2Bitmap(0, w, h); - bitmap->clearToZero(); - - //----- MMR decode - - if (mmr) { - - mmrDecoder->reset(); - if (w > INT_MAX - 2) { - error(errSyntaxError, 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)); - codingLine[0] = 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), - "Bad reference in JBIG2 generic refinement segment"); - return; - } - if (nRefSegs == 1) { - if (!(seg = findSegment(refSegs[0])) || - seg->getType() != jbig2SegBitmap) { - error(errSyntaxError, 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 { - bitmap->setSegNum(segNum); - segments->append(bitmap); - } - - // delete the referenced bitmap - if (nRefSegs == 1) { - discardSegment(refSegs[0]); - } else { - delete refBitmap; - } - - return; - - eofError: - error(errSyntaxError, 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, cxPtr1, cxPtr2, cxPtr3, cxPtr4, cxPtr5, cxPtr6; - JBIG2BitmapPtr tpgrCXPtr0, tpgrCXPtr1, tpgrCXPtr2; - int x, y, pix; - - bitmap = new JBIG2Bitmap(0, w, h); - 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); - - // default pixel value - if (pageDefPixel) { - pageBitmap->clearToOne(); - } else { - pageBitmap->clearToZero(); - } - - return; - - eofError: - error(errSyntaxError, 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(errSyntaxError, 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/thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.h b/thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.h deleted file mode 100644 index f3443b3d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/JBIG2Stream.h +++ /dev/null @@ -1,149 +0,0 @@ -//======================================================================== -// -// JBIG2Stream.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef JBIG2STREAM_H -#define JBIG2STREAM_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" -#include "Stream.h" - -class GList; -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 getChar(); - virtual int lookChar(); - virtual GString *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; - GList *segments; // [JBIG2Segment] - GList *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/thirdparty/xpdf/3.02/src/xpdf/JPXStream.cc b/thirdparty/xpdf/3.02/src/xpdf/JPXStream.cc deleted file mode 100644 index 151e428e..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/JPXStream.cc +++ /dev/null @@ -1,3359 +0,0 @@ -//======================================================================== -// -// JPXStream.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "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? -// - handle tilePartToEOC in readTilePartData -// - progression orders 2, 3, and 4 -// - in coefficient decoding (readCodeBlockData): -// - selective arithmetic coding bypass -// (this also affects reading the cb->dataLen array) -// - 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 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 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) -{ - bufStr = new BufStream(str, 2); - - 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 bufStr; -} - -void JPXStream::reset() { - bufStr->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->dataLen); - 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; - } - bufStr->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 = 0; - } - 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); -} - -GString *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; - bufStr->reset(); - if (bufStr->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) { - bufStr->getChar(); - } - } - } else { - for (i = 0; i < dataLen - 3; ++i) { - bufStr->getChar(); - } - } - } - } else if (boxType == 0x6A703263) { // codestream - cover(3); - if (!(haveBPC && haveCSMode)) { - getImageParams2(bitsPerComponent, csMode); - } - break; - } else { - cover(4); - for (i = 0; i < dataLen; ++i) { - bufStr->getChar(); - } - } - } - } - bufStr->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) { - bufStr->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 (bufStr->lookChar() == 0xff) { - cover(7); - error(errSyntaxWarning, 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(errSyntaxError, getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - if (compression != 7) { - error(errSyntaxError, 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(errSyntaxError, getPos(), - "Found bits per component box before image header box in JPX stream"); - return gFalse; - } - if (dataLen != nComps) { - error(errSyntaxError, getPos(), - "Invalid bits per component box in JPX stream"); - return gFalse; - } - for (i = 0; i < nComps; ++i) { - if (!readUByte(&bpc[i])) { - error(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - haveCompMap = gTrue; - break; - case 0x63646566: // channel definition - cover(14); - if (!readUWord(&channelDefn.nChannels)) { - error(errSyntaxError, 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(errSyntaxError, getPos(), "Unexpected EOF in JPX stream"); - return gFalse; - } - } - haveChannelDefn = gTrue; - break; - case 0x6A703263: // contiguous codestream - cover(15); - if (!bpc) { - error(errSyntaxError, getPos(), - "JPX stream is missing the image header box"); - } - if (!haveCS) { - error(errSyntaxError, getPos(), - "JPX stream has no supported color spec"); - } - if (!readCodestream(dataLen)) { - return gFalse; - } - break; - default: - cover(16); - for (i = 0; i < dataLen; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - goto err; - } - } - break; - } - - if (ok && (!haveCS || newCS.prec > cs.prec)) { - cs = newCS; - haveCS = gTrue; - } - - return gTrue; - - err: - error(errSyntaxError, 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(errSyntaxError, 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 (haveSIZ) { - error(errSyntaxError, getPos(), - "Duplicate SIZ marker segment in JPX stream"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX SIZ marker segment"); - return gFalse; - } - if (haveImgHdr && img.nComps != nComps) { - error(errSyntaxError, getPos(), - "Different number of components in JPX SIZ marker segment"); - return gFalse; - } - if (img.xSize == 0 || img.ySize == 0 || - img.xOffset >= img.xSize || img.yOffset >= img.ySize || - img.xTileSize == 0 || img.yTileSize == 0) { - error(errSyntaxError, getPos(), "Error 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(errSyntaxError, 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].init = gFalse; - 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(errSyntaxError, getPos(), "Error in JPX SIZ marker segment"); - return gFalse; - } - if (img.tiles[0].tileComps[comp].hSep == 0 || - img.tiles[0].tileComps[comp].vSep == 0) { - error(errSyntaxError, 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 (!haveSIZ) { - error(errSyntaxError, getPos(), - "JPX COD marker segment before SIZ segment"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - if (img.tiles[0].tileComps[0].nDecompLevels > 32 || - img.tiles[0].tileComps[0].codeBlockW > 8 || - img.tiles[0].tileComps[0].codeBlockH > 8) { - error(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX COC marker segment"); - return gFalse; - } - if (img.tiles[0].tileComps[comp].nDecompLevels > 32 || - img.tiles[0].tileComps[comp].codeBlockW > 8 || - img.tiles[0].tileComps[comp].codeBlockH > 8) { - error(errSyntaxError, 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(errSyntaxError, 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 (!haveSIZ) { - error(errSyntaxError, getPos(), - "JPX QCD marker segment before SIZ segment"); - return gFalse; - } - if (!readUByte(&img.tiles[0].tileComps[0].quantStyle)) { - error(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x00) { - if (segLen <= 3) { - error(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } else if ((img.tiles[0].tileComps[0].quantStyle & 0x1f) == 0x02) { - if (segLen < 5) { - error(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x00) { - if (segLen <= (img.nComps > 256 ? 5 : 4)) { - error(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - } else if ((img.tiles[0].tileComps[comp].quantStyle & 0x1f) == 0x02) { - if (segLen < (img.nComps > 256 ? 5 : 4) + 2) { - error(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(errSyntaxError, 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 - error(errUnimplemented, -1, "got a JPX RGN segment"); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, getPos(), "Error in JPX RGN 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(errSyntaxError, 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 - error(errUnimplemented, -1, "got a JPX POC segment"); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, getPos(), "Error in JPX POC 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(errSyntaxError, 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 - error(errUnimplemented, -1, "Got a JPX PPM segment"); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - error(errSyntaxError, 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(errSyntaxError, getPos(), - "Unknown marker segment {0:02x} in JPX stream", segType); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - break; - } - } - break; - } - } while (!haveSOT); - - if (!haveSIZ) { - error(errSyntaxError, getPos(), - "Missing SIZ marker segment in JPX stream"); - return gFalse; - } - if (!haveCOD) { - error(errSyntaxError, getPos(), - "Missing COD marker segment in JPX stream"); - return gFalse; - } - if (!haveQCD) { - error(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX codestream"); - return gFalse; - } - if (segType != 0x90) { // SOT - start of tile - break; - } - } - - if (segType != 0xd9) { // EOC - end of codestream - error(errSyntaxError, 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]; - if (!tile->init) { - error(errSyntaxError, getPos(), "Uninitialized tile in JPX codestream"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX SOT marker segment"); - return gFalse; - } - - if ((tilePartIdx > 0 && !img.tiles[tileIdx].init) || - tileIdx >= img.nXTiles * img.nYTiles) { - error(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX COD marker segment"); - return gFalse; - } - if (img.tiles[tileIdx].tileComps[0].nDecompLevels > 32 || - img.tiles[tileIdx].tileComps[0].codeBlockW > 8 || - img.tiles[tileIdx].tileComps[0].codeBlockH > 8) { - error(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX COC marker segment"); - return gFalse; - } - if (img.tiles[tileIdx].tileComps[comp].nDecompLevels > 32 || - img.tiles[tileIdx].tileComps[comp].codeBlockW > 8 || - img.tiles[tileIdx].tileComps[comp].codeBlockH > 8) { - error(errSyntaxError, getPos(), "Error in JPX COD 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x00) { - if (segLen <= 3) { - error(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } else if ((img.tiles[tileIdx].tileComps[0].quantStyle & 0x1f) == 0x02) { - if (segLen < 5) { - error(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) == 0x00) { - if (segLen <= (img.nComps > 256 ? 5 : 4)) { - error(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - 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(errSyntaxError, 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(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - } else if ((img.tiles[tileIdx].tileComps[comp].quantStyle & 0x1f) - == 0x02) { - if (segLen < (img.nComps > 256 ? 5 : 4) + 2) { - error(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - 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(errSyntaxError, getPos(), "Error in JPX QCD marker segment"); - return gFalse; - } - } - } else { - error(errSyntaxError, getPos(), "Error in JPX QCC marker segment"); - return gFalse; - } - break; - case 0x5e: // RGN - region of interest - cover(38); -#if 1 //~ ROI is unimplemented - error(errUnimplemented, -1, "Got a JPX RGN segment"); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, getPos(), "Error in JPX RGN 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(errSyntaxError, 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 - error(errUnimplemented, -1, "Got a JPX POC segment"); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, getPos(), "Error in JPX POC 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(errSyntaxError, 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 - error(errUnimplemented, -1, "Got a JPX PPT segment"); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - error(errSyntaxError, 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 (bufStr->getChar() == EOF) { - error(errSyntaxError, 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(errSyntaxError, getPos(), - "Unknown marker segment {0:02x} in JPX tile-part stream", - segType); - for (i = 0; i < segLen - 2; ++i) { - if (bufStr->getChar() == EOF) { - break; - } - } - break; - } - } while (!haveSOD); - - //----- initialize the tile, precincts, and code-blocks - if (tilePartIdx == 0) { - tile = &img.tiles[tileIdx]; - tile->init = gTrue; - 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->dataLenSize = 1; - cb->dataLen = (Guint *)gmalloc(sizeof(Guint)); - 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); - if (tileComp->style & 0x02) { - skipSOP(); - } - - // 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; - } - - // one codeword segment for each of the coding passes - if (tileComp->codeBlockStyle & 0x04) { - if (cb->nCodingPasses > cb->dataLenSize) { - cb->dataLenSize = cb->nCodingPasses; - cb->dataLen = (Guint *)greallocn(cb->dataLen, - cb->dataLenSize, - sizeof(Guint)); - } - - // read the lengths - for (i = 0; i < cb->nCodingPasses; ++i) { - if (!readBits(cb->lBlock, &cb->dataLen[i])) { - goto err; - } - } - - // one codeword segment for all of the coding passes - } else { - - // read the length - for (n = cb->lBlock, i = cb->nCodingPasses >> 1; - i; - ++n, i >>= 1) ; - if (!readBits(n, &cb->dataLen[0])) { - goto err; - } - } - } - } - } - } - } - if (tileComp->style & 0x04) { - skipEPH(); - } - 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; - } - if (tileComp->codeBlockStyle & 0x04) { - for (i = 0; i < cb->nCodingPasses; ++i) { - tilePartLen -= cb->dataLen[i]; - } - } else { - tilePartLen -= cb->dataLen[0]; - } - 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(errSyntaxError, 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; - int segSym; - Guint i, x, y0, y1, y2; - - if (cb->arithDecoder) { - cover(63); - cb->arithDecoder->restart(cb->dataLen[0]); - } else { - cover(64); - cb->arithDecoder = new JArithmeticDecoder(); - cb->arithDecoder->setStream(bufStr, cb->dataLen[0]); - 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) { - if ((tileComp->codeBlockStyle & 0x04) && i > 0) { - cb->arithDecoder->setStream(bufStr, cb->dataLen[i]); - cb->arithDecoder->start(); - } - - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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))) && - ((tileComp->codeBlockStyle & 0x08) || - (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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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 && - (!(tileComp->codeBlockStyle & 0x08) || y1 < 3)) { - 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; - } - } - } - } - // look for a segmentation symbol - if (tileComp->codeBlockStyle & 0x20) { - segSym = cb->arithDecoder->decodeBit(jpxContextUniform, - cb->stats) << 3; - segSym |= cb->arithDecoder->decodeBit(jpxContextUniform, - cb->stats) << 2; - segSym |= cb->arithDecoder->decodeBit(jpxContextUniform, - cb->stats) << 1; - segSym |= cb->arithDecoder->decodeBit(jpxContextUniform, - cb->stats); - if (segSym != 0x0a) { - // in theory this should be a fatal error, but it seems to - // be problematic - error(errSyntaxWarning, getPos(), - "Missing or invalid segmentation symbol in JPX stream"); - } - } - cb->nextPass = jpxPassSigProp; - break; - } - - if (tileComp->codeBlockStyle & 0x02) { - cb->stats->reset(); - cb->stats->setEntry(jpxContextSigProp, 4, 0); - cb->stats->setEntry(jpxContextRunLength, 3, 0); - cb->stats->setEntry(jpxContextUniform, 46, 0); - } - - if (tileComp->codeBlockStyle & 0x04) { - cb->arithDecoder->cleanup(); - } - } - - 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 -// - 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(errSyntaxError, 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 = bufStr->getChar()) == EOF) { - return gFalse; - } - } while (c != 0xff); - do { - if ((c = bufStr->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 = bufStr->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)c0; - return gTrue; -} - -GBool JPXStream::readByte(int *x) { - int c0; - - if ((c0 = bufStr->getChar()) == EOF) { - return gFalse; - } - *x = c0; - if (c0 & 0x80) { - *x |= -1 - 0xff; - } - return gTrue; -} - -GBool JPXStream::readUWord(Guint *x) { - int c0, c1; - - if ((c0 = bufStr->getChar()) == EOF || - (c1 = bufStr->getChar()) == EOF) { - return gFalse; - } - *x = (Guint)((c0 << 8) | c1); - return gTrue; -} - -GBool JPXStream::readULong(Guint *x) { - int c0, c1, c2, c3; - - if ((c0 = bufStr->getChar()) == EOF || - (c1 = bufStr->getChar()) == EOF || - (c2 = bufStr->getChar()) == EOF || - (c3 = bufStr->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 = bufStr->getChar()) == EOF) { - return gFalse; - } - y = (y << 8) + c; - } - if (signd) { - if (y & (1 << (8 * nBytes - 1))) { - y |= -1 << (8 * nBytes); - } - } - *x = y; - return gTrue; -} - -void JPXStream::startBitBuf(Guint byteCountA) { - bitBufLen = 0; - bitBufSkip = gFalse; - byteCount = byteCountA; -} - -GBool JPXStream::readBits(int nBits, Guint *x) { - int c; - - while (bitBufLen < nBits) { - if (byteCount == 0 || (c = bufStr->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::skipSOP() { - int i; - - // SOP occurs at the start of the packet header, so we don't need to - // worry about bit-stuff prior to it - if (byteCount >= 6 && - bufStr->lookChar(0) == 0xff && - bufStr->lookChar(1) == 0x91) { - for (i = 0; i < 6; ++i) { - bufStr->getChar(); - } - byteCount -= 6; - bitBufLen = 0; - bitBufSkip = gFalse; - } -} - -void JPXStream::skipEPH() { - int i, k; - - k = bitBufSkip ? 1 : 0; - if (byteCount >= (Guint)(k + 2) && - bufStr->lookChar(k) == 0xff && - bufStr->lookChar(k + 1) == 0x92) { - for (i = 0; i < k + 2; ++i) { - bufStr->getChar(); - } - byteCount -= k + 2; - bitBufLen = 0; - bitBufSkip = gFalse; - } -} - -Guint JPXStream::finishBitBuf() { - if (bitBufSkip) { - bufStr->getChar(); - --byteCount; - } - return byteCount; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/JPXStream.h b/thirdparty/xpdf/3.02/src/xpdf/JPXStream.h deleted file mode 100644 index c7db7385..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/JPXStream.h +++ /dev/null @@ -1,358 +0,0 @@ -//======================================================================== -// -// JPXStream.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef JPXSTREAM_H -#define JPXSTREAM_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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; // data lengths (one per codeword segment) - Guint dataLenSize; // size of the dataLen array - - //----- 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 { - GBool init; - - //----- 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 GString *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); - void startBitBuf(Guint byteCountA); - GBool readBits(int nBits, Guint *x); - void skipSOP(); - void skipEPH(); - Guint finishBitBuf(); - - BufStream *bufStr; // buffered stream (for lookahead) - - 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/thirdparty/xpdf/3.02/src/xpdf/Lexer.cc b/thirdparty/xpdf/3.02/src/xpdf/Lexer.cc deleted file mode 100644 index 05897569..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Lexer.cc +++ /dev/null @@ -1,501 +0,0 @@ -//======================================================================== -// -// Lexer.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include "Lexer.h" -#include "Error.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 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 -}; - -//------------------------------------------------------------------------ -// Lexer -//------------------------------------------------------------------------ - -Lexer::Lexer(XRef *xref, Stream *str) { - Object obj; - - curStr.initStream(str); - streams = new Array(xref); - streams->add(curStr.copy(&obj)); - strPtr = 0; - freeArray = gTrue; - curStr.streamReset(); -} - -Lexer::Lexer(XRef *xref, Object *obj) { - Object obj2; - - 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() { - int c; - - c = EOF; - while (!curStr.isNone() && (c = curStr.streamGetChar()) == EOF) { - curStr.streamClose(); - curStr.free(); - ++strPtr; - if (strPtr < streams->getLength()) { - streams->get(strPtr, &curStr); - curStr.streamReset(); - } - } - return c; -} - -int Lexer::lookChar() { - if (curStr.isNone()) { - return EOF; - } - return curStr.streamLookChar(); -} - -Object *Lexer::getObj(Object *obj) { - char *p; - int c, c2; - GBool comment, neg, done; - int numParen; - int xi; - double xf, scale; - GString *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 '.': - neg = gFalse; - xf = xi = 0; - if (c == '-') { - neg = gTrue; - } else if (c == '.') { - goto doReal; - } else { - xf = xi = c - '0'; - } - while (1) { - c = lookChar(); - if (isdigit(c)) { - getChar(); - xi = xi * 10 + (c - '0'); - xf = xf * 10 + (c - '0'); - } else if (c == '.') { - getChar(); - goto doReal; - } else { - break; - } - } - if (neg) { - xi = -xi; - } - obj->initInt(xi); - break; - doReal: - scale = 0.1; - while (1) { - c = lookChar(); - if (c == '-') { - // ignore minus signs in the middle of numbers to match - // Adobe's behavior - error(errSyntaxWarning, 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(errSyntaxError, 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(errSyntaxError, 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 GString(tokBuf, tokBufSize); - else - s->append(tokBuf, tokBufSize); - p = tokBuf; - n = 0; - } - *p++ = (char)c2; - ++n; - } - } while (!done); - if (!s) - s = new GString(tokBuf, n); - else - s->append(tokBuf, n); - obj->initString(s); - 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(errSyntaxError, getPos(), "Illegal digit in hex char in name"); - } - } - notEscChar: - // the PDF spec claims that names are limited to 127 chars, but - // Distiller 8 will produce longer names, and Acrobat 8 will - // accept longer names - ++n; - if (n < tokBufSize) { - *p++ = c; - } else if (n == tokBufSize) { - *p = c; - s = new GString(tokBuf, n); - } else { - s->append((char)c); - } - } - if (n < tokBufSize) { - *p = '\0'; - obj->initName(tokBuf); - } else { - obj->initName(s->getCString()); - delete s; - } - 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(errSyntaxError, 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(errSyntaxError, getPos(), - "Illegal character <{0:02x}> in hex string", c); - if (++m == 2) { - if (n == tokBufSize) { - if (!s) - s = new GString(tokBuf, tokBufSize); - else - s->append(tokBuf, tokBufSize); - p = tokBuf; - n = 0; - } - *p++ = (char)c2; - ++n; - c2 = 0; - m = 0; - } - } - } - if (!s) - s = new GString(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(errSyntaxError, getPos(), "Illegal character '>'"); - obj->initError(); - } - break; - - // error - case ')': - case '{': - case '}': - error(errSyntaxError, getPos(), "Illegal character '{0:c}'", c); - obj->initError(); - break; - - // command - default: - p = tokBuf; - *p++ = c; - n = 1; - while ((c = lookChar()) != EOF && !specialChars[c]) { - getChar(); - if (++n == tokBufSize) { - error(errSyntaxError, 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/thirdparty/xpdf/3.02/src/xpdf/Lexer.h b/thirdparty/xpdf/3.02/src/xpdf/Lexer.h deleted file mode 100644 index f6ad9ce9..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Lexer.h +++ /dev/null @@ -1,80 +0,0 @@ -//======================================================================== -// -// Lexer.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef LEXER_H -#define LEXER_H - -#include - -#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 *xref, Stream *str); - - // Construct a lexer for a stream or array of streams (assumes obj - // is either a stream or array of streams). - Lexer(XRef *xref, Object *obj); - - // Destructor. - ~Lexer(); - - // Get the next object from the input stream. - Object *getObj(Object *obj); - - // 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.isNone() ? (Stream *)NULL : curStr.getStream(); } - - // 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.isNone() ? -1 : (int)curStr.streamGetPos(); } - - // Set position in file. - void setPos(Guint pos, int dir = 0) - { if (!curStr.isNone()) curStr.streamSetPos(pos, dir); } - - // Returns true if is a whitespace character. - static GBool isSpace(int c); - -private: - - int getChar(); - 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 -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Link.cc b/thirdparty/xpdf/3.02/src/xpdf/Link.cc deleted file mode 100644 index f3d3c399..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Link.cc +++ /dev/null @@ -1,801 +0,0 @@ -//======================================================================== -// -// Link.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include "gmem.h" -#include "GString.h" -#include "Error.h" -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Link.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, GString *baseURI) { - LinkAction *action; - Object obj2, obj3, obj4; - - if (!obj->isDict()) { - error(errSyntaxWarning, -1, "Bad annotation action"); - 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")) { - obj->dictLookupNF("Annot", &obj3); - obj->dictLookup("T", &obj4); - action = new LinkMovie(&obj3, &obj4); - obj3.free(); - obj4.free(); - - // unknown action - } else if (obj2.isName()) { - action = new LinkUnknown(obj2.getName()); - - // action is missing or wrong type - } else { - error(errSyntaxWarning, -1, "Bad annotation action"); - action = NULL; - } - - obj2.free(); - - if (action && !action->isOk()) { - delete action; - return NULL; - } - return action; -} - -GString *LinkAction::getFileSpecName(Object *fileSpecObj) { - GString *name; - Object obj1; - - name = NULL; - - // string - if (fileSpecObj->isString()) { - name = fileSpecObj->getString()->copy(); - - // dictionary - } else if (fileSpecObj->isDict()) { -#ifdef WIN32 - if (!fileSpecObj->dictLookup("DOS", &obj1)->isString()) { -#else - if (!fileSpecObj->dictLookup("Unix", &obj1)->isString()) { -#endif - obj1.free(); - fileSpecObj->dictLookup("F", &obj1); - } - if (obj1.isString()) { - name = obj1.getString()->copy(); - } else { - error(errSyntaxWarning, -1, "Illegal file spec in link"); - } - obj1.free(); - - // error - } else { - error(errSyntaxWarning, -1, "Illegal file spec in link"); - } - - // system-dependent path manipulation - if (name) { -#ifdef WIN32 - int i, j; - - // "//...." --> "\...." - // "/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); - } - } -#else - // no manipulation needed for Unix -#endif - } - - return name; -} - -//------------------------------------------------------------------------ -// LinkDest -//------------------------------------------------------------------------ - -LinkDest::LinkDest(Array *a) { - Object obj1, obj2; - - // initialize fields - left = bottom = right = top = zoom = 0; - ok = gFalse; - - // get page - if (a->getLength() < 2) { - error(errSyntaxWarning, -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(errSyntaxWarning, -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(errSyntaxWarning, -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(errSyntaxWarning, -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(errSyntaxWarning, -1, "Bad annotation destination position"); - goto err1; - } - obj2.free(); - } - - // Fit link - } else if (obj1.isName("Fit")) { - if (a->getLength() < 2) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFit; - - // FitH link - } else if (obj1.isName("FitH")) { - if (a->getLength() < 3) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitH; - if (a->get(2, &obj2)->isNum()) { - top = obj2.getNum(); - changeTop = gTrue; - } else if (obj2.isNull()) { - changeTop = gFalse; - } else { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // FitV link - } else if (obj1.isName("FitV")) { - if (a->getLength() < 3) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitV; - if (a->get(2, &obj2)->isNum()) { - left = obj2.getNum(); - changeLeft = gTrue; - } else if (obj2.isNull()) { - changeLeft = gFalse; - } else { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // FitR link - } else if (obj1.isName("FitR")) { - if (a->getLength() < 6) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitR; - if (a->get(2, &obj2)->isNum()) { - left = obj2.getNum(); - } else { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - if (!a->get(3, &obj2)->isNum()) { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - bottom = obj2.getNum(); - obj2.free(); - if (!a->get(4, &obj2)->isNum()) { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - right = obj2.getNum(); - obj2.free(); - if (!a->get(5, &obj2)->isNum()) { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - top = obj2.getNum(); - obj2.free(); - - // FitB link - } else if (obj1.isName("FitB")) { - if (a->getLength() < 2) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitB; - - // FitBH link - } else if (obj1.isName("FitBH")) { - if (a->getLength() < 3) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitBH; - if (a->get(2, &obj2)->isNum()) { - top = obj2.getNum(); - changeTop = gTrue; - } else if (obj2.isNull()) { - changeTop = gFalse; - } else { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // FitBV link - } else if (obj1.isName("FitBV")) { - if (a->getLength() < 3) { - error(errSyntaxWarning, -1, "Annotation destination array is too short"); - goto err2; - } - kind = destFitBV; - if (a->get(2, &obj2)->isNum()) { - left = obj2.getNum(); - changeLeft = gTrue; - } else if (obj2.isNull()) { - changeLeft = gFalse; - } else { - error(errSyntaxWarning, -1, "Bad annotation destination position"); - kind = destFit; - } - obj2.free(); - - // unknown link kind - } else { - error(errSyntaxWarning, -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 GString(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(errSyntaxWarning, -1, "Illegal annotation destination"); - } -} - -LinkGoTo::~LinkGoTo() { - if (dest) - delete dest; - if (namedDest) - delete namedDest; -} - -//------------------------------------------------------------------------ -// LinkGoToR -//------------------------------------------------------------------------ - -LinkGoToR::LinkGoToR(Object *fileSpecObj, Object *destObj) { - dest = NULL; - namedDest = NULL; - - // get file name - fileName = getFileSpecName(fileSpecObj); - - // named destination - if (destObj->isName()) { - namedDest = new GString(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(errSyntaxWarning, -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; - - fileName = NULL; - params = NULL; - - if (actionObj->isDict()) { - if (!actionObj->dictLookup("F", &obj1)->isNull()) { - fileName = getFileSpecName(&obj1); - } else { - obj1.free(); -#ifdef WIN32 - if (actionObj->dictLookup("Win", &obj1)->isDict()) { - obj1.dictLookup("F", &obj2); - fileName = getFileSpecName(&obj2); - obj2.free(); - if (obj1.dictLookup("P", &obj2)->isString()) { - params = obj2.getString()->copy(); - } - obj2.free(); - } else { - error(errSyntaxWarning, -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); - fileName = getFileSpecName(&obj2); - obj2.free(); - if (obj1.dictLookup("P", &obj2)->isString()) { - params = obj2.getString()->copy(); - } - obj2.free(); - } else { - error(errSyntaxWarning, -1, "Bad launch-type link action"); - } -#endif - } - obj1.free(); - } -} - -LinkLaunch::~LinkLaunch() { - if (fileName) - delete fileName; - if (params) - delete params; -} - -//------------------------------------------------------------------------ -// LinkURI -//------------------------------------------------------------------------ - -LinkURI::LinkURI(Object *uriObj, GString *baseURI) { - GString *uri2; - int n; - char c; - - uri = NULL; - if (uriObj->isString()) { - uri2 = uriObj->getString(); - n = strcspn(uri2->getCString(), "/:"); - if (n < uri2->getLength() && uri2->getChar(n) == ':') { - // "http:..." etc. - uri = uri2->copy(); - } else { - // relative URI - if (baseURI) { - uri = baseURI->copy(); - c = uri->getChar(uri->getLength() - 1); - if (c != '/' && c != '?') { - uri->append('/'); - } - if (uri2->getChar(0) == '/') { - uri->append(uri2->getCString() + 1, uri2->getLength() - 1); - } else { - uri->append(uri2); - } - } else { - uri = uri2->copy(); - } - } - } else { - error(errSyntaxWarning, -1, "Illegal URI-type link"); - } -} - -LinkURI::~LinkURI() { - if (uri) - delete uri; -} - -//------------------------------------------------------------------------ -// LinkNamed -//------------------------------------------------------------------------ - -LinkNamed::LinkNamed(Object *nameObj) { - name = NULL; - if (nameObj->isName()) { - name = new GString(nameObj->getName()); - } -} - -LinkNamed::~LinkNamed() { - if (name) { - delete name; - } -} - -//------------------------------------------------------------------------ -// LinkMovie -//------------------------------------------------------------------------ - -LinkMovie::LinkMovie(Object *annotObj, Object *titleObj) { - annotRef.num = -1; - title = NULL; - if (annotObj->isRef()) { - annotRef = annotObj->getRef(); - } else if (titleObj->isString()) { - title = titleObj->getString()->copy(); - } else { - error(errSyntaxError, -1, - "Movie action is missing both the Annot and T keys"); - } -} - -LinkMovie::~LinkMovie() { - if (title) { - delete title; - } -} - -//------------------------------------------------------------------------ -// LinkUnknown -//------------------------------------------------------------------------ - -LinkUnknown::LinkUnknown(char *actionA) { - action = new GString(actionA); -} - -LinkUnknown::~LinkUnknown() { - delete action; -} - -//------------------------------------------------------------------------ -// Link -//------------------------------------------------------------------------ - -Link::Link(Dict *dict, GString *baseURI) { - Object obj1, obj2; - double t; - - action = NULL; - ok = gFalse; - - // get rectangle - if (!dict->lookup("Rect", &obj1)->isArray()) { - error(errSyntaxError, -1, "Annotation rectangle is wrong type"); - goto err2; - } - if (!obj1.arrayGet(0, &obj2)->isNum()) { - error(errSyntaxError, -1, "Bad annotation rectangle"); - goto err1; - } - x1 = obj2.getNum(); - obj2.free(); - if (!obj1.arrayGet(1, &obj2)->isNum()) { - error(errSyntaxError, -1, "Bad annotation rectangle"); - goto err1; - } - y1 = obj2.getNum(); - obj2.free(); - if (!obj1.arrayGet(2, &obj2)->isNum()) { - error(errSyntaxError, -1, "Bad annotation rectangle"); - goto err1; - } - x2 = obj2.getNum(); - obj2.free(); - if (!obj1.arrayGet(3, &obj2)->isNum()) { - error(errSyntaxError, -1, "Bad annotation rectangle"); - goto err1; - } - y2 = obj2.getNum(); - obj2.free(); - obj1.free(); - if (x1 > x2) { - t = x1; - x1 = x2; - x2 = t; - } - if (y1 > y2) { - t = y1; - y1 = y2; - y2 = t; - } - - // 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, baseURI); - } - } - obj1.free(); - - // check for bad action - if (action) { - ok = gTrue; - } - - return; - - err1: - obj2.free(); - err2: - obj1.free(); -} - -Link::~Link() { - if (action) { - delete action; - } -} - -//------------------------------------------------------------------------ -// Links -//------------------------------------------------------------------------ - -Links::Links(Object *annots, GString *baseURI) { - Link *link; - Object obj1, obj2; - int size; - int i; - - links = NULL; - size = 0; - numLinks = 0; - - if (annots->isArray()) { - for (i = 0; i < annots->arrayGetLength(); ++i) { - if (annots->arrayGet(i, &obj1)->isDict()) { - if (obj1.dictLookup("Subtype", &obj2)->isName("Link")) { - link = new Link(obj1.getDict(), baseURI); - if (link->isOk()) { - if (numLinks >= size) { - size += 16; - links = (Link **)greallocn(links, size, sizeof(Link *)); - } - links[numLinks++] = link; - } else { - delete link; - } - } - obj2.free(); - } - obj1.free(); - } - } -} - -Links::~Links() { - int i; - - for (i = 0; i < numLinks; ++i) - delete links[i]; - gfree(links); -} - -LinkAction *Links::find(double x, double y) { - 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) { - int i; - - for (i = 0; i < numLinks; ++i) { - if (links[i]->inRect(x, y)) - return gTrue; - } - return gFalse; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Link.h b/thirdparty/xpdf/3.02/src/xpdf/Link.h deleted file mode 100644 index 55fbfa1c..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Link.h +++ /dev/null @@ -1,371 +0,0 @@ -//======================================================================== -// -// Link.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef LINK_H -#define LINK_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class GString; -class Array; -class Dict; - -//------------------------------------------------------------------------ -// 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 - 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, GString *baseURI = NULL); - - // Extract a file name from a file specification (string or - // dictionary). - static GString *getFileSpecName(Object *fileSpecObj); -}; - -//------------------------------------------------------------------------ -// 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; // which position components to change: - GBool changeZoom; // destXYZ uses all three; - // destFitH/BH use changeTop; - // destFitV/BV use changeLeft - 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; } - GString *getNamedDest() { return namedDest; } - -private: - - LinkDest *dest; // regular destination (NULL for remote - // link with bad destination) - GString *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; } - GString *getFileName() { return fileName; } - LinkDest *getDest() { return dest; } - GString *getNamedDest() { return namedDest; } - -private: - - GString *fileName; // file name - LinkDest *dest; // regular destination (NULL for remote - // link with bad destination) - GString *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; } - GString *getFileName() { return fileName; } - GString *getParams() { return params; } - -private: - - GString *fileName; // file name - GString *params; // parameters -}; - -//------------------------------------------------------------------------ -// LinkURI -//------------------------------------------------------------------------ - -class LinkURI: public LinkAction { -public: - - // Build a LinkURI given the URI (string) and base URI. - LinkURI(Object *uriObj, GString *baseURI); - - // Destructor. - virtual ~LinkURI(); - - // Was the LinkURI created successfully? - virtual GBool isOk() { return uri != NULL; } - - // Accessors. - virtual LinkActionKind getKind() { return actionURI; } - GString *getURI() { return uri; } - -private: - - GString *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; } - GString *getName() { return name; } - -private: - - GString *name; -}; - -//------------------------------------------------------------------------ -// LinkMovie -//------------------------------------------------------------------------ - -class LinkMovie: public LinkAction { -public: - - LinkMovie(Object *annotObj, Object *titleObj); - - virtual ~LinkMovie(); - - virtual GBool isOk() { return annotRef.num >= 0 || title != NULL; } - - virtual LinkActionKind getKind() { return actionMovie; } - GBool hasAnnotRef() { return annotRef.num >= 0; } - Ref *getAnnotRef() { return &annotRef; } - GString *getTitle() { return title; } - -private: - - Ref annotRef; - GString *title; -}; - -//------------------------------------------------------------------------ -// 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; } - GString *getAction() { return action; } - -private: - - GString *action; // action subtype -}; - -//------------------------------------------------------------------------ -// Link -//------------------------------------------------------------------------ - -class Link { -public: - - // Construct a link, given its dictionary. - Link(Dict *dict, GString *baseURI); - - // Destructor. - ~Link(); - - // Was the link created successfully? - GBool isOk() { return ok; } - - // Check if point is inside the link rectangle. - GBool inRect(double x, double y) - { return x1 <= x && x <= x2 && y1 <= y && y <= y2; } - - // Get action. - LinkAction *getAction() { return action; } - - // Get the link rectangle. - void getRect(double *xa1, double *ya1, double *xa2, double *ya2) - { *xa1 = x1; *ya1 = y1; *xa2 = x2; *ya2 = y2; } - -private: - - double x1, y1; // lower left corner - double x2, y2; // upper right corner - LinkAction *action; // action - GBool ok; // is link valid? -}; - -//------------------------------------------------------------------------ -// Links -//------------------------------------------------------------------------ - -class Links { -public: - - // Extract links from array of annotations. - Links(Object *annots, GString *baseURI); - - // Destructor. - ~Links(); - - // Iterate through list of links. - int getNumLinks() { return numLinks; } - Link *getLink(int i) { return links[i]; } - - // If point , is in a link, return the associated action; - // else return NULL. - LinkAction *find(double x, double y); - - // Return true if , is in a link. - GBool onLink(double x, double y); - -private: - - Link **links; - int numLinks; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Makefile.dep b/thirdparty/xpdf/3.02/src/xpdf/Makefile.dep deleted file mode 100644 index e69de29b..00000000 diff --git a/thirdparty/xpdf/3.02/src/xpdf/Makefile.in b/thirdparty/xpdf/3.02/src/xpdf/Makefile.in deleted file mode 100644 index 31475a62..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Makefile.in +++ /dev/null @@ -1,251 +0,0 @@ -#======================================================================== -# -# Xpdf Makefile -# -# Copyright 1996-2003 Glyph & Cog, LLC -# -#======================================================================== - -SHELL = /bin/sh - -prefix = @prefix@ -srcdir = @srcdir@ -VPATH = @srcdir@ - -GOOSRCDIR = $(srcdir)/../goo -GOOLIBDIR = ../goo -FOFISRCDIR = $(srcdir)/../fofi -FOFILIBDIR = ../fofi -SPLASHSRCDIR = $(srcdir)/../splash -SPLASHLIBDIR = ../splash - -CXXFLAGS = @CXXFLAGS@ @DEFS@ -I.. -I$(GOOSRCDIR) -I$(FOFISRCDIR) -I$(SPLASHSRCDIR) -I$(srcdir) @freetype2_CFLAGS@ @Sgm_CFLAGS@ @Xm_CFLAGS@ @Xt_CFLAGS@ @Xp_CFLAGS@ @Xext_CFLAGS@ @Xpm_CFLAGS@ @t1_CFLAGS@ @libpaper_CFLAGS@ @X_CFLAGS@ - -LDFLAGS = @LDFLAGS@ - -T1LIBS = @t1_LIBS@ -FTLIBS = @freetype2_LIBS@ - -XLIBS = @Sgm_LIBS@ @Xm_LIBS@ @Xt_LIBS@ @Xp_LIBS@ @Xext_LIBS@ @Xpm_LIBS@ @X_PRE_LIBS@ @X_LIBS@ -lX11 @X_EXTRA_LIBS@ - -SPLASHLIBS = -L$(SPLASHLIBDIR) -lsplash - -OTHERLIBS = @LIBS@ @libpaper_LIBS@ \ - -L$(FOFILIBDIR) -lfofi \ - -L$(GOOLIBDIR) -lGoo - -CXX = @CXX@ - -LIBPREFIX = @LIBPREFIX@ -EXE = @EXE@ - -#------------------------------------------------------------------------ - -.SUFFIXES: .cc - -.cc.o: - $(CXX) $(CXXFLAGS) -c $< - -#------------------------------------------------------------------------ - -CXX_SRC = \ - $(srcdir)/Annot.cc \ - $(srcdir)/Array.cc \ - $(srcdir)/BuiltinFont.cc \ - $(srcdir)/BuiltinFontTables.cc \ - $(srcdir)/CMap.cc \ - $(srcdir)/Catalog.cc \ - $(srcdir)/CharCodeToUnicode.cc \ - $(srcdir)/CoreOutputDev.cc \ - $(srcdir)/Decrypt.cc \ - $(srcdir)/Dict.cc \ - $(srcdir)/Error.cc \ - $(srcdir)/FontEncodingTables.cc \ - $(srcdir)/Function.cc \ - $(srcdir)/Gfx.cc \ - $(srcdir)/GfxFont.cc \ - $(srcdir)/GfxState.cc \ - $(srcdir)/GlobalParams.cc \ - $(srcdir)/ImageOutputDev.cc \ - $(srcdir)/JArithmeticDecoder.cc \ - $(srcdir)/JBIG2Stream.cc \ - $(srcdir)/JPXStream.cc \ - $(srcdir)/Lexer.cc \ - $(srcdir)/Link.cc \ - $(srcdir)/NameToCharCode.cc \ - $(srcdir)/Object.cc \ - $(srcdir)/OptionalContent.cc \ - $(srcdir)/Outline.cc \ - $(srcdir)/OutputDev.cc \ - $(srcdir)/PDFCore.cc \ - $(srcdir)/PDFDoc.cc \ - $(srcdir)/PDFDocEncoding.cc \ - $(srcdir)/PSOutputDev.cc \ - $(srcdir)/PSTokenizer.cc \ - $(srcdir)/Page.cc \ - $(srcdir)/Parser.cc \ - $(srcdir)/PreScanOutputDev.cc \ - $(srcdir)/SecurityHandler.cc \ - $(srcdir)/SplashOutputDev.cc \ - $(srcdir)/Stream.cc \ - $(srcdir)/TextOutputDev.cc \ - $(srcdir)/UnicodeMap.cc \ - $(srcdir)/UnicodeTypeTable.cc \ - $(srcdir)/XPDFApp.cc \ - $(srcdir)/XPDFCore.cc \ - $(srcdir)/XPDFTree.cc \ - $(srcdir)/XPDFViewer.cc \ - $(srcdir)/XpdfPluginAPI.cc \ - $(srcdir)/XRef.cc \ - $(srcdir)/pdftops.cc \ - $(srcdir)/pdftotext.cc \ - $(srcdir)/pdfinfo.cc \ - $(srcdir)/pdffonts.cc \ - $(srcdir)/pdftoppm.cc \ - $(srcdir)/pdfimages.cc \ - $(srcdir)/xpdf.cc - -#------------------------------------------------------------------------ - -all: xpdf$(EXE) pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) \ - pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE) - -all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \ - pdfimages$(EXE) - -#------------------------------------------------------------------------ - -XPDF_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o Catalog.o \ - CharCodeToUnicode.o CMap.o CoreOutputDev.o Decrypt.o Dict.o \ - Error.o FontEncodingTables.o Function.o Gfx.o GfxFont.o \ - GfxState.o GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o \ - JPXStream.o Lexer.o Link.o NameToCharCode.o Object.o \ - OptionalContent.o Outline.o OutputDev.o Page.o Parser.o PDFCore.o \ - PDFDoc.o PDFDocEncoding.o PreScanOutputDev.o PSOutputDev.o \ - PSTokenizer.o SecurityHandler.o SplashOutputDev.o Stream.o \ - TextOutputDev.o UnicodeMap.o UnicodeTypeTable.o XPDFApp.o \ - XPDFCore.o XPDFTree.o XPDFViewer.o XpdfPluginAPI.o XRef.o xpdf.o -XPDF_LIBS = -L$(GOOLIBDIR) -lGoo $(SPLASHLIBS) $(T1LIBS) $(FTLIBS) \ - $(XLIBS) $(OTHERLIBS) -lm - -xpdf$(EXE): $(XPDF_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o xpdf$(EXE) $(XPDF_OBJS) $(XPDF_LIBS) - -#------------------------------------------------------------------------ - -PDFTOPS_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o \ - Catalog.o CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \ - FontEncodingTables.o Function.o Gfx.o GfxFont.o \ - GfxState.o GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o \ - JPXStream.o Lexer.o Link.o NameToCharCode.o OptionalContent.o \ - Outline.o Object.o OutputDev.o Page.o Parser.o PDFDoc.o \ - PDFDocEncoding.o PreScanOutputDev.o PSOutputDev.o PSTokenizer.o \ - SecurityHandler.o SplashOutputDev.o Stream.o UnicodeMap.o \ - XpdfPluginAPI.o XRef.o pdftops.o -PDFTOPS_LIBS = -L$(GOOLIBDIR) -lGoo $(SPLASHLIBS) $(T1LIBS) $(FTLIBS) \ - $(OTHERLIBS) -lm - -pdftops$(EXE): $(PDFTOPS_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o pdftops$(EXE) $(PDFTOPS_OBJS) \ - $(PDFTOPS_LIBS) - -#------------------------------------------------------------------------ - -PDFTOTEXT_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o \ - Catalog.o CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \ - FontEncodingTables.o Function.o Gfx.o GfxFont.o \ - GfxState.o GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o \ - JPXStream.o Lexer.o Link.o NameToCharCode.o Object.o \ - OptionalContent.o Outline.o OutputDev.o Page.o Parser.o PDFDoc.o \ - PDFDocEncoding.o PSTokenizer.o SecurityHandler.o Stream.o \ - TextOutputDev.o UnicodeMap.o UnicodeTypeTable.o XpdfPluginAPI.o \ - XRef.o pdftotext.o -PDFTOTEXT_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm - -pdftotext$(EXE): $(PDFTOTEXT_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o pdftotext$(EXE) $(PDFTOTEXT_OBJS) \ - $(PDFTOTEXT_LIBS) - -#------------------------------------------------------------------------ - -PDFINFO_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o \ - Catalog.o CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \ - FontEncodingTables.o Function.o Gfx.o GfxFont.o \ - GfxState.o GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o \ - JPXStream.o Lexer.o Link.o NameToCharCode.o Object.o \ - OptionalContent.o Outline.o OutputDev.o Page.o Parser.o PDFDoc.o \ - PDFDocEncoding.o PSTokenizer.o SecurityHandler.o Stream.o \ - UnicodeMap.o XpdfPluginAPI.o XRef.o pdfinfo.o -PDFINFO_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm - -pdfinfo$(EXE): $(PDFINFO_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o pdfinfo$(EXE) $(PDFINFO_OBJS) \ - $(PDFINFO_LIBS) - -#------------------------------------------------------------------------ - -PDFFONTS_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o \ - Catalog.o CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \ - FontEncodingTables.o Function.o Gfx.o GfxFont.o \ - GfxState.o GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o \ - JPXStream.o Lexer.o Link.o NameToCharCode.o Object.o \ - OptionalContent.o Outline.o OutputDev.o Page.o Parser.o PDFDoc.o \ - PDFDocEncoding.o PSTokenizer.o SecurityHandler.o Stream.o \ - UnicodeMap.o XpdfPluginAPI.o XRef.o pdffonts.o -PDFFONTS_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm - -pdffonts$(EXE): $(PDFFONTS_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o pdffonts$(EXE) $(PDFFONTS_OBJS) \ - $(PDFFONTS_LIBS) - -#------------------------------------------------------------------------ - -PDFTOPPM_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o \ - Catalog.o CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \ - FontEncodingTables.o Function.o Gfx.o GfxFont.o GfxState.o \ - GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o JPXStream.o \ - Lexer.o Link.o NameToCharCode.o Object.o OptionalContent.o \ - Outline.o OutputDev.o Page.o Parser.o PDFDoc.o PDFDocEncoding.o \ - PSTokenizer.o SecurityHandler.o SplashOutputDev.o Stream.o \ - TextOutputDev.o UnicodeMap.o UnicodeTypeTable.o XpdfPluginAPI.o \ - XRef.o pdftoppm.o -PDFTOPPM_LIBS = -L$(GOOLIBDIR) -lGoo $(SPLASHLIBS) $(T1LIBS) $(FTLIBS) \ - $(OTHERLIBS) -lm - -pdftoppm$(EXE): $(PDFTOPPM_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o pdftoppm$(EXE) $(PDFTOPPM_OBJS) \ - $(PDFTOPPM_LIBS) - -#------------------------------------------------------------------------ - -PDFIMAGES_OBJS = Annot.o Array.o BuiltinFont.o BuiltinFontTables.o \ - Catalog.o CharCodeToUnicode.o CMap.o Decrypt.o Dict.o Error.o \ - FontEncodingTables.o Function.o Gfx.o GfxFont.o GfxState.o \ - GlobalParams.o ImageOutputDev.o JArithmeticDecoder.o \ - JBIG2Stream.o JPXStream.o Lexer.o Link.o NameToCharCode.o Object.o \ - OptionalContent.o Outline.o OutputDev.o Page.o Parser.o PDFDoc.o \ - PDFDocEncoding.o PSTokenizer.o SecurityHandler.o Stream.o \ - UnicodeMap.o XpdfPluginAPI.o XRef.o pdfimages.o -PDFIMAGES_LIBS = -L$(GOOLIBDIR) -lGoo $(OTHERLIBS) -lm - -pdfimages$(EXE): $(PDFIMAGES_OBJS) $(GOOLIBDIR)/$(LIBPREFIX)Goo.a - $(CXX) $(CXXFLAGS) $(LDFLAGS) -o pdfimages$(EXE) $(PDFIMAGES_OBJS) \ - $(PDFIMAGES_LIBS) - -#------------------------------------------------------------------------ - -clean: - rm -f $(XPDF_OBJS) xpdf$(EXE) - rm -f $(PDFTOPS_OBJS) pdftops$(EXE) - rm -f $(PDFTOTEXT_OBJS) pdftotext$(EXE) - rm -f $(PDFINFO_OBJS) pdfinfo$(EXE) - rm -f $(PDFFONTS_OBJS) pdffonts$(EXE) - rm -f $(PDFTOPPM_OBJS) pdftoppm$(EXE) - rm -f $(PDFIMAGES_OBJS) pdfimages$(EXE) - -#------------------------------------------------------------------------ - -depend: - $(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >Makefile.dep - -include Makefile.dep diff --git a/thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.cc b/thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.cc deleted file mode 100644 index 7ebf4e16..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.cc +++ /dev/null @@ -1,116 +0,0 @@ -//======================================================================== -// -// NameToCharCode.cc -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "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/thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.h b/thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.h deleted file mode 100644 index 65453c3a..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/NameToCharCode.h +++ /dev/null @@ -1,42 +0,0 @@ -//======================================================================== -// -// NameToCharCode.h -// -// Copyright 2001-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef NAMETOCHARCODE_H -#define NAMETOCHARCODE_H - -#include - -#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/thirdparty/xpdf/3.02/src/xpdf/NameToUnicodeTable.h b/thirdparty/xpdf/3.02/src/xpdf/NameToUnicodeTable.h deleted file mode 100644 index c5ecba49..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/NameToUnicodeTable.h +++ /dev/null @@ -1,1097 +0,0 @@ -//======================================================================== -// -// NameToUnicodeTable.h -// -// Copyright 2001-2004 Glyph & Cog, LLC -// -//======================================================================== - -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/thirdparty/xpdf/3.02/src/xpdf/Object.cc b/thirdparty/xpdf/3.02/src/xpdf/Object.cc deleted file mode 100644 index c29af5bd..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Object.cc +++ /dev/null @@ -1,231 +0,0 @@ -//======================================================================== -// -// Object.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Error.h" -#include "Stream.h" -#include "XRef.h" - -//------------------------------------------------------------------------ -// Object -//------------------------------------------------------------------------ - -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, int recursion) { - return (type == objRef && xref) ? - xref->fetch(ref.num, ref.gen, obj, recursion) : 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, ""); - break; - case objRef: - fprintf(f, "%d %d R", ref.num, ref.gen); - break; - case objCmd: - fprintf(f, "%s", cmd); - break; - case objError: - fprintf(f, ""); - break; - case objEOF: - fprintf(f, ""); - break; - case objNone: - fprintf(f, ""); - 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]); - } - } -#endif -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Object.h b/thirdparty/xpdf/3.02/src/xpdf/Object.h deleted file mode 100644 index 598c37ac..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Object.h +++ /dev/null @@ -1,303 +0,0 @@ -//======================================================================== -// -// Object.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef OBJECT_H -#define OBJECT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include -#include "gtypes.h" -#include "gmem.h" -#include "GString.h" - -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 -}; - -#define numObjTypes 14 // total number of object types - -//------------------------------------------------------------------------ -// Object -//------------------------------------------------------------------------ - -#ifdef DEBUG_MEM -#define initObj(t) ++numAlloc[type = t] -#else -#define initObj(t) type = t -#endif - -class Object { -public: - - // Default constructor. - Object(): - type(objNone) {} - - // 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(GString *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; } - - // Copy an object. - Object *copy(Object *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, int recursion = 0); - - // 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; } - - // 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. NB: these assume object is of correct type. - GBool getBool() { return booln; } - int getInt() { return intg; } - double getReal() { return real; } - double getNum() { return type == objInt ? (double)intg : real; } - GString *getString() { return string; } - char *getName() { return name; } - Array *getArray() { return array; } - Dict *getDict() { return dict; } - Stream *getStream() { return stream; } - Ref getRef() { return ref; } - int getRefNum() { return ref.num; } - int getRefGen() { return ref.gen; } - char *getCmd() { return cmd; } - - // 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); - GBool dictIs(char *dictType); - Object *dictLookup(char *key, Object *obj, int recursion = 0); - 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 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 - double real; // real - GString *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() - { return array->getLength(); } - -inline void Object::arrayAdd(Object *elem) - { array->add(elem); } - -inline Object *Object::arrayGet(int i, Object *obj) - { return array->get(i, obj); } - -inline Object *Object::arrayGetNF(int i, Object *obj) - { return array->getNF(i, obj); } - -//------------------------------------------------------------------------ -// Dict accessors. -//------------------------------------------------------------------------ - -#include "Dict.h" - -inline int Object::dictGetLength() - { return dict->getLength(); } - -inline void Object::dictAdd(char *key, Object *val) - { dict->add(key, val); } - -inline GBool Object::dictIs(char *dictType) - { return dict->is(dictType); } - -inline GBool Object::isDict(char *dictType) - { return type == objDict && dictIs(dictType); } - -inline Object *Object::dictLookup(char *key, Object *obj, int recursion) - { return dict->lookup(key, obj, recursion); } - -inline Object *Object::dictLookupNF(char *key, Object *obj) - { return dict->lookupNF(key, obj); } - -inline char *Object::dictGetKey(int i) - { return dict->getKey(i); } - -inline Object *Object::dictGetVal(int i, Object *obj) - { return dict->getVal(i, obj); } - -inline Object *Object::dictGetValNF(int i, Object *obj) - { return dict->getValNF(i, obj); } - -//------------------------------------------------------------------------ -// Stream accessors. -//------------------------------------------------------------------------ - -#include "Stream.h" - -inline GBool Object::streamIs(char *dictType) - { return stream->getDict()->is(dictType); } - -inline GBool Object::isStream(char *dictType) - { return type == objStream && streamIs(dictType); } - -inline void Object::streamReset() - { stream->reset(); } - -inline void Object::streamClose() - { stream->close(); } - -inline int Object::streamGetChar() - { return stream->getChar(); } - -inline int Object::streamLookChar() - { return stream->lookChar(); } - -inline char *Object::streamGetLine(char *buf, int size) - { return stream->getLine(buf, size); } - -inline Guint Object::streamGetPos() - { return stream->getPos(); } - -inline void Object::streamSetPos(Guint pos, int dir) - { stream->setPos(pos, dir); } - -inline Dict *Object::streamGetDict() - { return stream->getDict(); } - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/OptionalContent.cc b/thirdparty/xpdf/3.02/src/xpdf/OptionalContent.cc deleted file mode 100644 index 589719cf..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/OptionalContent.cc +++ /dev/null @@ -1,500 +0,0 @@ -//======================================================================== -// -// OptionalContent.cc -// -// Copyright 2008 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "GString.h" -#include "GList.h" -#include "Error.h" -#include "Object.h" -#include "PDFDoc.h" -#include "PDFDocEncoding.h" -#include "OptionalContent.h" - -//------------------------------------------------------------------------ - -#define ocPolicyAllOn 1 -#define ocPolicyAnyOn 2 -#define ocPolicyAnyOff 3 -#define ocPolicyAllOff 4 - -//------------------------------------------------------------------------ - -// Max depth of nested visibility expressions. This is used to catch -// infinite loops in the visibility expression object structure. -#define visibilityExprRecursionLimit 50 - -// Max depth of nested display nodes. This is used to catch infinite -// loops in the "Order" object structure. -#define displayNodeRecursionLimit 50 - -//------------------------------------------------------------------------ - -OptionalContent::OptionalContent(PDFDoc *doc) { - Object *ocProps; - Object ocgList, defView, obj1, obj2; - Ref ref1; - OptionalContentGroup *ocg; - int i; - - xref = doc->getXRef(); - ocgs = new GList(); - display = NULL; - - if ((ocProps = doc->getCatalog()->getOCProperties())->isDict()) { - if (ocProps->dictLookup("OCGs", &ocgList)->isArray()) { - - //----- read the OCG list - for (i = 0; i < ocgList.arrayGetLength(); ++i) { - if (ocgList.arrayGetNF(i, &obj1)->isRef()) { - ref1 = obj1.getRef(); - obj1.fetch(xref, &obj2); - if ((ocg = OptionalContentGroup::parse(&ref1, &obj2))) { - ocgs->append(ocg); - } - obj2.free(); - } - obj1.free(); - } - - //----- read the default viewing OCCD - if (ocProps->dictLookup("D", &defView)->isDict()) { - - //----- initial state - if (defView.dictLookup("OFF", &obj1)->isArray()) { - for (i = 0; i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGetNF(i, &obj2)->isRef()) { - ref1 = obj2.getRef(); - if ((ocg = findOCG(&ref1))) { - ocg->setState(gFalse); - } else { - error(errSyntaxError, -1, - "Invalid OCG reference in OFF array in default viewing OCCD"); - } - } - obj2.free(); - } - } - obj1.free(); - - //----- display order - if (defView.dictLookup("Order", &obj1)->isArray()) { - display = OCDisplayNode::parse(&obj1, this, xref); - } - obj1.free(); - - } else { - error(errSyntaxError, -1, "Missing or invalid default viewing OCCD"); - } - defView.free(); - - } - ocgList.free(); - } - - if (!display) { - display = new OCDisplayNode(); - } -} - -OptionalContent::~OptionalContent() { - deleteGList(ocgs, OptionalContentGroup); - delete display; -} - -int OptionalContent::getNumOCGs() { - return ocgs->getLength(); -} - -OptionalContentGroup *OptionalContent::getOCG(int idx) { - return (OptionalContentGroup *)ocgs->get(idx); -} - -OptionalContentGroup *OptionalContent::findOCG(Ref *ref) { - OptionalContentGroup *ocg; - int i; - - for (i = 0; i < ocgs->getLength(); ++i) { - ocg = (OptionalContentGroup *)ocgs->get(i); - if (ocg->matches(ref)) { - return ocg; - } - } - return NULL; -} - -GBool OptionalContent::evalOCObject(Object *obj, GBool *visible) { - OptionalContentGroup *ocg; - int policy; - Ref ref; - Object obj2, obj3, obj4, obj5; - int i; - - if (obj->isNull()) { - return gFalse; - } - if (obj->isRef()) { - ref = obj->getRef(); - if ((ocg = findOCG(&ref))) { - *visible = ocg->getState(); - return gTrue; - } - } - obj->fetch(xref, &obj2); - if (obj2.isDict("OCMD")) { - if (obj2.dictLookup("VE", &obj3)->isArray()) { - *visible = evalOCVisibilityExpr(&obj3, 0); - obj3.free(); - } else { - obj3.free(); - policy = ocPolicyAnyOn; - if (obj2.dictLookup("P", &obj3)->isName()) { - if (obj3.isName("AllOn")) { - policy = ocPolicyAllOn; - } else if (obj3.isName("AnyOn")) { - policy = ocPolicyAnyOn; - } else if (obj3.isName("AnyOff")) { - policy = ocPolicyAnyOff; - } else if (obj3.isName("AllOff")) { - policy = ocPolicyAllOff; - } - } - obj3.free(); - obj2.dictLookupNF("OCGs", &obj3); - ocg = NULL; - if (obj3.isRef()) { - ref = obj3.getRef(); - ocg = findOCG(&ref); - } - if (ocg) { - *visible = (policy == ocPolicyAllOn || policy == ocPolicyAnyOn) ? - ocg->getState() : !ocg->getState(); - } else { - *visible = gTrue; - if (obj3.fetch(xref, &obj4)->isArray()) { - for (i = 0; i < obj4.arrayGetLength(); ++i) { - obj4.arrayGetNF(i, &obj5); - if (obj5.isRef()) { - ref = obj5.getRef(); - if ((ocg = findOCG(&ref))) { - switch (policy) { - case ocPolicyAllOn: - *visible = *visible && ocg->getState(); - break; - case ocPolicyAnyOn: - *visible = *visible || ocg->getState(); - break; - case ocPolicyAnyOff: - *visible = *visible || !ocg->getState(); - break; - case ocPolicyAllOff: - *visible = *visible && !ocg->getState(); - break; - } - } - } - obj5.free(); - } - } - obj4.free(); - } - obj3.free(); - } - obj2.free(); - return gTrue; - } - obj2.free(); - return gFalse; -} - -GBool OptionalContent::evalOCVisibilityExpr(Object *expr, int recursion) { - OptionalContentGroup *ocg; - Object expr2, op, obj; - Ref ref; - GBool ret; - int i; - - if (recursion > visibilityExprRecursionLimit) { - error(errSyntaxError, -1, - "Loop detected in optional content visibility expression"); - return gTrue; - } - if (expr->isRef()) { - ref = expr->getRef(); - if ((ocg = findOCG(&ref))) { - return ocg->getState(); - } - } - expr->fetch(xref, &expr2); - if (!expr2.isArray() || expr2.arrayGetLength() < 1) { - error(errSyntaxError, -1, - "Invalid optional content visibility expression"); - expr2.free(); - return gTrue; - } - expr2.arrayGet(0, &op); - if (op.isName("Not")) { - if (expr2.arrayGetLength() == 2) { - expr2.arrayGetNF(1, &obj); - ret = !evalOCVisibilityExpr(&obj, recursion + 1); - obj.free(); - } else { - error(errSyntaxError, -1, - "Invalid optional content visibility expression"); - ret = gTrue; - } - } else if (op.isName("And")) { - ret = gTrue; - for (i = 1; i < expr2.arrayGetLength() && ret; ++i) { - expr2.arrayGetNF(i, &obj); - ret = evalOCVisibilityExpr(&obj, recursion + 1); - obj.free(); - } - } else if (op.isName("Or")) { - ret = gFalse; - for (i = 1; i < expr2.arrayGetLength() && !ret; ++i) { - expr2.arrayGetNF(i, &obj); - ret = evalOCVisibilityExpr(&obj, recursion + 1); - obj.free(); - } - } else { - error(errSyntaxError, -1, - "Invalid optional content visibility expression"); - ret = gTrue; - } - op.free(); - expr2.free(); - return ret; -} - -//------------------------------------------------------------------------ - -OptionalContentGroup *OptionalContentGroup::parse(Ref *refA, Object *obj) { - Unicode *nameA; - int nameLenA; - Object obj1, obj2, obj3; - GString *s; - OCUsageState viewStateA, printStateA; - int i; - - if (!obj->isDict()) { - return NULL; - } - if (!obj->dictLookup("Name", &obj1)->isString()) { - error(errSyntaxError, -1, "Missing or invalid Name in OCG"); - obj1.free(); - return NULL; - } - s = obj1.getString(); - if ((s->getChar(0) & 0xff) == 0xfe && - (s->getChar(1) & 0xff) == 0xff) { - nameLenA = (s->getLength() - 2) / 2; - nameA = (Unicode *)gmallocn(nameLenA, sizeof(Unicode)); - for (i = 0; i < nameLenA; ++i) { - nameA[i] = ((s->getChar(2 + 2*i) & 0xff) << 8) | - (s->getChar(3 + 2*i) & 0xff); - } - } else { - nameLenA = s->getLength(); - nameA = (Unicode *)gmallocn(nameLenA, sizeof(Unicode)); - for (i = 0; i < nameLenA; ++i) { - nameA[i] = pdfDocEncoding[s->getChar(i) & 0xff]; - } - } - obj1.free(); - - viewStateA = printStateA = ocUsageUnset; - if (obj->dictLookup("Usage", &obj1)->isDict()) { - if (obj1.dictLookup("View", &obj2)->isDict()) { - if (obj2.dictLookup("ViewState", &obj3)->isName()) { - if (obj3.isName("ON")) { - viewStateA = ocUsageOn; - } else { - viewStateA = ocUsageOff; - } - } - obj3.free(); - } - obj2.free(); - if (obj1.dictLookup("Print", &obj2)->isDict()) { - if (obj2.dictLookup("PrintState", &obj3)->isName()) { - if (obj3.isName("ON")) { - printStateA = ocUsageOn; - } else { - printStateA = ocUsageOff; - } - } - obj3.free(); - } - obj2.free(); - } - obj1.free(); - - return new OptionalContentGroup(refA, nameA, nameLenA, - viewStateA, printStateA); -} - -OptionalContentGroup::OptionalContentGroup(Ref *refA, Unicode *nameA, - int nameLenA, - OCUsageState viewStateA, - OCUsageState printStateA) { - ref = *refA; - name = nameA; - nameLen = nameLenA; - viewState = viewStateA; - printState = printStateA; - state = gTrue; -} - -OptionalContentGroup::~OptionalContentGroup() { - gfree(name); -} - -GBool OptionalContentGroup::matches(Ref *refA) { - return refA->num == ref.num && refA->gen == ref.gen; -} - -//------------------------------------------------------------------------ - -OCDisplayNode *OCDisplayNode::parse(Object *obj, OptionalContent *oc, - XRef *xref, int recursion) { - Object obj2, obj3; - Ref ref; - OptionalContentGroup *ocgA; - OCDisplayNode *node, *child; - int i; - - if (recursion > displayNodeRecursionLimit) { - error(errSyntaxError, -1, "Loop detected in optional content order"); - return NULL; - } - if (obj->isRef()) { - ref = obj->getRef(); - if ((ocgA = oc->findOCG(&ref))) { - return new OCDisplayNode(ocgA); - } - } - obj->fetch(xref, &obj2); - if (!obj2.isArray()) { - obj2.free(); - return NULL; - } - i = 0; - if (obj2.arrayGetLength() >= 1) { - if (obj2.arrayGet(0, &obj3)->isString()) { - node = new OCDisplayNode(obj3.getString()); - i = 1; - } else { - node = new OCDisplayNode(); - } - obj3.free(); - } else { - node = new OCDisplayNode(); - } - for (; i < obj2.arrayGetLength(); ++i) { - obj2.arrayGetNF(i, &obj3); - if ((child = OCDisplayNode::parse(&obj3, oc, xref, recursion + 1))) { - if (!child->ocg && !child->name && node->getNumChildren() > 0) { - node->getChild(node->getNumChildren() - 1)-> - addChildren(child->takeChildren()); - delete child; - } else { - node->addChild(child); - } - } - obj3.free(); - } - obj2.free(); - return node; -} - -OCDisplayNode::OCDisplayNode() { - name = NULL; - nameLen = 0; - ocg = NULL; - children = NULL; -} - -OCDisplayNode::OCDisplayNode(GString *nameA) { - int i; - - if ((nameA->getChar(0) & 0xff) == 0xfe && - (nameA->getChar(1) & 0xff) == 0xff) { - nameLen = (nameA->getLength() - 2) / 2; - name = (Unicode *)gmallocn(nameLen, sizeof(Unicode)); - for (i = 0; i < nameLen; ++i) { - name[i] = ((nameA->getChar(2 + 2*i) & 0xff) << 8) | - (nameA->getChar(3 + 2*i) & 0xff); - } - } else { - nameLen = nameA->getLength(); - name = (Unicode *)gmallocn(nameLen, sizeof(Unicode)); - for (i = 0; i < nameLen; ++i) { - name[i] = pdfDocEncoding[nameA->getChar(i) & 0xff]; - } - } - ocg = NULL; - children = NULL; -} - -OCDisplayNode::OCDisplayNode(OptionalContentGroup *ocgA) { - nameLen = ocgA->getNameLength(); - if (nameLen) { - name = (Unicode *)gmallocn(nameLen, sizeof(Unicode)); - memcpy(name, ocgA->getName(), nameLen * sizeof(Unicode)); - } else { - name = NULL; - } - ocg = ocgA; - children = NULL; -} - -void OCDisplayNode::addChild(OCDisplayNode *child) { - if (!children) { - children = new GList(); - } - children->append(child); -} - -void OCDisplayNode::addChildren(GList *childrenA) { - if (!children) { - children = new GList(); - } - children->append(childrenA); - delete childrenA; -} - -GList *OCDisplayNode::takeChildren() { - GList *childrenA; - - childrenA = children; - children = NULL; - return childrenA; -} - -OCDisplayNode::~OCDisplayNode() { - gfree(name); - if (children) { - deleteGList(children, OCDisplayNode); - } -} - -int OCDisplayNode::getNumChildren() { - if (!children) { - return 0; - } - return children->getLength(); -} - -OCDisplayNode *OCDisplayNode::getChild(int idx) { - return (OCDisplayNode *)children->get(idx); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/OptionalContent.h b/thirdparty/xpdf/3.02/src/xpdf/OptionalContent.h deleted file mode 100644 index 82d3e0ef..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/OptionalContent.h +++ /dev/null @@ -1,132 +0,0 @@ -//======================================================================== -// -// OptionalContent.h -// -// Copyright 2008 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef OPTIONALCONTENT_H -#define OPTIONALCONTENT_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" -#include "CharTypes.h" - -class GString; -class GList; -class PDFDoc; -class XRef; -class OptionalContentGroup; -class OCDisplayNode; - -//------------------------------------------------------------------------ - -class OptionalContent { -public: - - OptionalContent(PDFDoc *doc); - ~OptionalContent(); - - // Walk the list of optional content groups. - int getNumOCGs(); - OptionalContentGroup *getOCG(int idx); - - // Find an OCG by indirect reference. - OptionalContentGroup *findOCG(Ref *ref); - - // Get the root node of the optional content group display tree - // (which does not necessarily include all of the OCGs). - OCDisplayNode *getDisplayRoot() { return display; } - - // Evaluate an optional content object -- either an OCG or an OCMD. - // If is a valid OCG or OCMD, sets * and returns - // true; otherwise returns false. - GBool evalOCObject(Object *obj, GBool *visible); - -private: - - GBool evalOCVisibilityExpr(Object *expr, int recursion); - - XRef *xref; - GList *ocgs; // all OCGs [OptionalContentGroup] - OCDisplayNode *display; // root node of display tree -}; - -//------------------------------------------------------------------------ - -// Values from the optional content usage dictionary. -enum OCUsageState { - ocUsageOn, - ocUsageOff, - ocUsageUnset -}; - -//------------------------------------------------------------------------ - -class OptionalContentGroup { -public: - - static OptionalContentGroup *parse(Ref *refA, Object *obj); - ~OptionalContentGroup(); - - GBool matches(Ref *refA); - - Unicode *getName() { return name; } - int getNameLength() { return nameLen; } - OCUsageState getViewState() { return viewState; } - OCUsageState getPrintState() { return printState; } - GBool getState() { return state; } - void setState(GBool stateA) { state = stateA; } - -private: - - OptionalContentGroup(Ref *refA, Unicode *nameA, int nameLenA, - OCUsageState viewStateA, OCUsageState printStateA); - - Ref ref; - Unicode *name; - int nameLen; - OCUsageState viewState, // suggested state when viewing - printState; // suggested state when printing - GBool state; // current state (on/off) -}; - -//------------------------------------------------------------------------ - -class OCDisplayNode { -public: - - static OCDisplayNode *parse(Object *obj, OptionalContent *oc, XRef *xref, - int recursion = 0); - OCDisplayNode(); - ~OCDisplayNode(); - - Unicode *getName() { return name; } - int getNameLength() { return nameLen; } - OptionalContentGroup *getOCG() { return ocg; } - int getNumChildren(); - OCDisplayNode *getChild(int idx); - -private: - - OCDisplayNode(GString *nameA); - OCDisplayNode(OptionalContentGroup *ocgA); - void addChild(OCDisplayNode *child); - void addChildren(GList *childrenA); - GList *takeChildren(); - - Unicode *name; // display name (may be NULL) - int nameLen; - OptionalContentGroup *ocg; // NULL for display labels - GList *children; // NULL if there are no children - // [OCDisplayNode] -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Outline.cc b/thirdparty/xpdf/3.02/src/xpdf/Outline.cc deleted file mode 100644 index a8fc6fa6..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Outline.cc +++ /dev/null @@ -1,170 +0,0 @@ -//======================================================================== -// -// Outline.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "gmem.h" -#include "GString.h" -#include "GList.h" -#include "Error.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; - } - outlineObj->dictLookupNF("First", &first); - outlineObj->dictLookupNF("Last", &last); - if (first.isRef() && last.isRef()) { - items = OutlineItem::readItemList(&first, &last, xref); - } - first.free(); - last.free(); -} - -Outline::~Outline() { - if (items) { - deleteGList(items, OutlineItem); - } -} - -//------------------------------------------------------------------------ - -OutlineItem::OutlineItem(Dict *dict, XRef *xrefA) { - Object obj1; - GString *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(); -} - -GList *OutlineItem::readItemList(Object *firstItemRef, Object *lastItemRef, - XRef *xrefA) { - GList *items; - OutlineItem *item; - Object obj; - Object *p, *refObj; - int i; - - items = new GList(); - if (!firstItemRef->isRef() || !lastItemRef->isRef()) { - return items; - } - p = firstItemRef; - while (1) { - if (!p->fetch(xrefA, &obj)->isDict()) { - obj.free(); - break; - } - item = new OutlineItem(obj.getDict(), xrefA); - obj.free(); - items->append(item); - if (p->getRefNum() == lastItemRef->getRef().num && - p->getRefGen() == lastItemRef->getRef().gen) { - break; - } - p = &item->nextRef; - if (!p->isRef()) { - break; - } - for (i = 0; i < items->getLength(); ++i) { - refObj = (i == 0) ? firstItemRef - : &((OutlineItem *)items->get(i - 1))->nextRef; - if (refObj->getRefNum() == p->getRefNum() && - refObj->getRefGen() == p->getRefGen()) { - error(errSyntaxError, -1, "Loop detected in outline item list"); - break; - } - } - } - return items; -} - -void OutlineItem::open() { - if (!kids) { - kids = readItemList(&firstRef, &lastRef, xref); - } -} - -void OutlineItem::close() { - if (kids) { - deleteGList(kids, OutlineItem); - kids = NULL; - } -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Outline.h b/thirdparty/xpdf/3.02/src/xpdf/Outline.h deleted file mode 100644 index f38f8d16..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Outline.h +++ /dev/null @@ -1,76 +0,0 @@ -//======================================================================== -// -// Outline.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef OUTLINE_H -#define OUTLINE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" -#include "CharTypes.h" - -class GString; -class GList; -class XRef; -class LinkAction; - -//------------------------------------------------------------------------ - -class Outline { -public: - - Outline(Object *outlineObj, XRef *xref); - ~Outline(); - - GList *getItems() { return items; } - -private: - - GList *items; // NULL if document has no outline - // [OutlineItem] -}; - -//------------------------------------------------------------------------ - -class OutlineItem { -public: - - OutlineItem(Dict *dict, XRef *xrefA); - ~OutlineItem(); - - static GList *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(); } - GList *getKids() { return kids; } - -private: - - XRef *xref; - Unicode *title; - int titleLen; - LinkAction *action; - Object firstRef; - Object lastRef; - Object nextRef; - GBool startsOpen; - GList *kids; // NULL unless this item is open [OutlineItem] -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/OutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/OutputDev.cc deleted file mode 100644 index d2ef2868..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/OutputDev.cc +++ /dev/null @@ -1,139 +0,0 @@ -//======================================================================== -// -// OutputDev.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "Object.h" -#include "Stream.h" -#include "GfxState.h" -#include "OutputDev.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); - updateOverprintMode(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 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::setSoftMaskFromImageMask(GfxState *state, - Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg) { - drawImageMask(state, ref, str, width, height, invert, inlineImg); -} - -void OutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - 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, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert) { - drawImage(state, ref, str, width, height, colorMap, NULL, gFalse); -} - -void OutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap) { - drawImage(state, ref, str, width, height, colorMap, NULL, gFalse); -} - -#if OPI_SUPPORT -void OutputDev::opiBegin(GfxState *state, Dict *opiDict) { -} - -void OutputDev::opiEnd(GfxState *state, Dict *opiDict) { -} -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/OutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/OutputDev.h deleted file mode 100644 index 135144db..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/OutputDev.h +++ /dev/null @@ -1,263 +0,0 @@ -//======================================================================== -// -// OutputDev.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef OUTPUTDEV_H -#define OUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "CharTypes.h" - -class GString; -class Gfx; -class GfxState; -struct GfxColor; -class GfxColorSpace; -class GfxImageColorMap; -class GfxFunctionShading; -class GfxAxialShading; -class GfxRadialShading; -class Stream; -class Links; -class Link; -class Catalog; -class Page; -class Function; - -//------------------------------------------------------------------------ -// OutputDev -//------------------------------------------------------------------------ - -class OutputDev { -public: - - // Constructor. - OutputDev() {} - - // 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 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() { 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; } - - // Does this device require incCharCount to be called for text on - // non-shown layers? - virtual GBool needCharCount() { return gFalse; } - - - //----- 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, - 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 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) {} - - //----- 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) {} - virtual void saveTextPos(GfxState *state) {} - virtual void restoreTextPos(GfxState *state) {} - - //----- path painting - virtual void stroke(GfxState *state) {} - virtual void fill(GfxState *state) {} - virtual void eoFill(GfxState *state) {} - virtual void tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, 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) - { return gFalse; } - virtual GBool axialShadedFill(GfxState *state, GfxAxialShading *shading) - { return gFalse; } - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *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, GString *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, GString *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 endTextObject(GfxState *state) {} - virtual void incCharCount(int nChars) {} - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void setSoftMaskFromImageMask(GfxState *state, - Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap); - -#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) {} - - //----- 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(Link *link) {} - -#if 1 //~tmp: turn off anti-aliasing temporarily - virtual void setInShading(GBool sh) {} -#endif - -private: - - double defCTM[6]; // default coordinate transform matrix - double defICTM[6]; // inverse of default CTM -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/PDFCore.cc b/thirdparty/xpdf/3.02/src/xpdf/PDFCore.cc deleted file mode 100644 index d46c39d2..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PDFCore.cc +++ /dev/null @@ -1,2711 +0,0 @@ -//======================================================================== -// -// PDFCore.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "GString.h" -#include "GList.h" -#include "GlobalParams.h" -#include "Splash.h" -#include "SplashBitmap.h" -#include "SplashPattern.h" -#include "SplashPath.h" -#include "Error.h" -#include "ErrorCodes.h" -#include "PDFDoc.h" -#include "Link.h" -#include "TextOutputDev.h" -#include "CoreOutputDev.h" -#ifdef HIGHLIGHTED_REGIONS -#include "HighlightFile.h" -#endif -#include "PDFCore.h" - -//------------------------------------------------------------------------ -// PDFCorePage -//------------------------------------------------------------------------ - -PDFCorePage::PDFCorePage(int pageA, int wA, int hA, int tileWA, int tileHA) { - page = pageA; - tiles = new GList(); - w = wA; - h = hA; - tileW = tileWA; - tileH = tileHA; - links = NULL; - text = NULL; -#ifdef HIGHLIGHTED_REGIONS - regions = new GList(); -#endif -} - -PDFCorePage::~PDFCorePage() { - deleteGList(tiles, PDFCoreTile); - if (links) { - delete links; - } - if (text) { - delete text; - } -#ifdef HIGHLIGHTED_REGIONS - delete regions; -#endif -} - -//------------------------------------------------------------------------ -// PDFCoreTile -//------------------------------------------------------------------------ - -PDFCoreTile::PDFCoreTile(int xDestA, int yDestA) { - xMin = 0; - yMin = 0; - xMax = 0; - yMax = 0; - xDest = xDestA; - yDest = yDestA; - bitmap = NULL; -} - -PDFCoreTile::~PDFCoreTile() { - if (bitmap) { - delete bitmap; - } -} - -#ifdef HIGHLIGHTED_REGIONS - -//------------------------------------------------------------------------ -// PDFRegion -//------------------------------------------------------------------------ - -PDFRegion::PDFRegion() { - label = NULL; -} - -PDFRegion::~PDFRegion() { - if (label) { - delete label; - } -} - -#endif // HIGHLIGHTED_REGIONS - -//------------------------------------------------------------------------ -// PDFCore -//------------------------------------------------------------------------ - -PDFCore::PDFCore(SplashColorMode colorModeA, int bitmapRowPadA, - GBool reverseVideoA, SplashColorPtr paperColorA, - GBool incrementalUpdate) { - int i; - - doc = NULL; - continuousMode = globalParams->getContinuousView(); - drawAreaWidth = drawAreaHeight = 0; - maxPageW = totalDocH = 0; - pageY = NULL; - topPage = 0; - midPage = 0; - scrollX = scrollY = 0; - zoom = defZoom; - dpi = 0; - rotate = 0; - - selectPage = 0; - selectULX = selectLRX = 0; - selectULY = selectLRY = 0; - dragging = gFalse; - lastDragLeft = lastDragTop = gTrue; - - historyCur = pdfHistorySize - 1; - historyBLen = historyFLen = 0; - for (i = 0; i < pdfHistorySize; ++i) { - history[i].fileName = NULL; - } - -#ifdef HIGHLIGHTED_REGIONS - regions = new GList(); - selectedRegion = NULL; - regionResizeX = regionResizeY = 0; -#endif - - pages = new GList(); - curTile = NULL; - - splashColorCopy(paperColor, paperColorA); - out = new CoreOutputDev(colorModeA, bitmapRowPadA, - reverseVideoA, paperColorA, incrementalUpdate, - &redrawCbk, this); - out->startDoc(NULL); -} - -PDFCore::~PDFCore() { - int i; - - if (doc) { - delete doc; - } - for (i = 0; i < pdfHistorySize; ++i) { - if (history[i].fileName) { - delete history[i].fileName; - } - } - gfree(pageY); -#ifdef HIGHLIGHTED_REGIONS - deleteGList(regions, PDFRegion); -#endif - deleteGList(pages, PDFCorePage); - delete out; -} - -int PDFCore::loadFile(GString *fileName, GString *ownerPassword, - GString *userPassword) { - int err; - - setBusyCursor(gTrue); - err = loadFile2(new PDFDoc(fileName->copy(), ownerPassword, userPassword, - this)); - setBusyCursor(gFalse); - return err; -} - -#ifdef WIN32 -int PDFCore::loadFile(wchar_t *fileName, int fileNameLen, - GString *ownerPassword, GString *userPassword) { - int err; - - setBusyCursor(gTrue); - err = loadFile2(new PDFDoc(fileName, fileNameLen, - ownerPassword, userPassword, this)); - setBusyCursor(gFalse); - return err; -} -#endif - -int PDFCore::loadFile(BaseStream *stream, GString *ownerPassword, - GString *userPassword) { - int err; - - setBusyCursor(gTrue); - err = loadFile2(new PDFDoc(stream, ownerPassword, userPassword, this)); - setBusyCursor(gFalse); - return err; -} - -void PDFCore::loadDoc(PDFDoc *docA) { - setBusyCursor(gTrue); - loadFile2(docA); - setBusyCursor(gFalse); -} - -int PDFCore::loadFile2(PDFDoc *newDoc) { - int err; - double w, h, t; - int i; - - // open the PDF file - if (!newDoc->isOk()) { - err = newDoc->getErrorCode(); - delete newDoc; - return err; - } - - // replace old document - if (doc) { - delete doc; - } - doc = newDoc; - if (out) { - out->startDoc(doc->getXRef()); - } - - // nothing displayed yet - topPage = -99; - midPage = -99; - while (pages->getLength() > 0) { - delete (PDFCorePage *)pages->del(0); - } - - // compute the max unscaled page size - maxUnscaledPageW = maxUnscaledPageH = 0; - for (i = 1; i <= doc->getNumPages(); ++i) { - w = doc->getPageCropWidth(i); - h = doc->getPageCropHeight(i); - if (doc->getPageRotate(i) == 90 || doc->getPageRotate(i) == 270) { - t = w; w = h; h = t; - } - if (w > maxUnscaledPageW) { - maxUnscaledPageW = w; - } - if (h > maxUnscaledPageH) { - maxUnscaledPageH = h; - } - } - - return errNone; -} - -void PDFCore::clear() { - if (!doc) { - return; - } - - // no document - delete doc; - doc = NULL; - out->clear(); - - // no page displayed - topPage = -99; - midPage = -99; - while (pages->getLength() > 0) { - delete (PDFCorePage *)pages->del(0); - } - - // redraw - scrollX = scrollY = 0; - redrawWindow(0, 0, drawAreaWidth, drawAreaHeight, gTrue); - updateScrollbars(); -} - -PDFDoc *PDFCore::takeDoc(GBool redraw) { - PDFDoc *docA; - - if (!doc) { - return NULL; - } - - // no document - docA = doc; - doc = NULL; - out->clear(); - - // no page displayed - topPage = -99; - midPage = -99; - while (pages->getLength() > 0) { - delete (PDFCorePage *)pages->del(0); - } - - // redraw - scrollX = scrollY = 0; - if (redraw) { - redrawWindow(0, 0, drawAreaWidth, drawAreaHeight, gTrue); - updateScrollbars(); - } - - return docA; -} - -void PDFCore::displayPage(int topPageA, double zoomA, int rotateA, - GBool scrollToTop, GBool addToHist) { - int scrollXA, scrollYA; - - scrollXA = scrollX; - if (continuousMode) { - scrollYA = -1; - } else if (scrollToTop) { - scrollYA = 0; - } else { - scrollYA = scrollY; - } - if (zoomA != zoom) { - scrollXA = 0; - scrollYA = continuousMode ? -1 : 0; - } - - dragging = gFalse; - lastDragLeft = lastDragTop = gTrue; -#ifdef HIGHLIGHTED_REGIONS - selectedRegion = NULL; -#endif - - update(topPageA, scrollXA, scrollYA, zoomA, rotateA, gTrue, addToHist, - gTrue); -} - -void PDFCore::displayDest(LinkDest *dest, double zoomA, int rotateA, - GBool addToHist) { - Ref pageRef; - int topPageA; - int dx, dy, scrollXA, scrollYA; - - if (dest->isPageRef()) { - pageRef = dest->getPageRef(); - topPageA = doc->findPage(pageRef.num, pageRef.gen); - } else { - topPageA = dest->getPageNum(); - } - if (topPageA <= 0 || topPageA > doc->getNumPages()) { - topPageA = 1; - } - scrollXA = scrollX; - scrollYA = continuousMode ? -1 : scrollY; - switch (dest->getKind()) { - case destXYZ: - cvtUserToDev(topPageA, dest->getLeft(), dest->getTop(), &dx, &dy); - scrollXA = dest->getChangeLeft() ? dx : scrollX; - if (continuousMode) { - if (topPage <= 0) { - scrollYA = -1; - } else if (dest->getChangeTop()) { - scrollYA = pageY[topPageA - 1] + dy; - } else { - scrollYA = pageY[topPageA - 1] + (scrollY - pageY[topPage - 1]); - } - } else { - if (dest->getChangeTop()) { - scrollYA = dy; - } else if (topPage > 0) { - scrollYA = scrollY; - } else { - scrollYA = 0; - } - } - //~ this doesn't currently handle the zoom parameter - update(topPageA, scrollXA, scrollYA, zoom, rotate, gFalse, - addToHist && topPageA != topPage, gTrue); - break; - case destFit: - case destFitB: - scrollXA = 0; - scrollYA = continuousMode ? -1 : 0; - update(topPageA, scrollXA, scrollYA, zoomPage, rotate, gFalse, - addToHist && topPageA != topPage, gTrue); - break; - case destFitH: - case destFitBH: - //~ do fit: need a function similar to zoomToRect which will - //~ accept an absolute top coordinate (rather than centering) - scrollXA = 0; - cvtUserToDev(topPageA, 0, dest->getTop(), &dx, &dy); - if (continuousMode) { - if (topPage <= 0) { - scrollYA = -1; - } else if (dest->getChangeTop()) { - scrollYA = pageY[topPageA - 1] + dy; - } else { - scrollYA = pageY[topPageA - 1] + (scrollY - pageY[topPage - 1]); - } - } else { - if (dest->getChangeTop()) { - scrollYA = dy; - } else if (topPage > 0) { - scrollYA = scrollY; - } else { - scrollYA = 0; - } - } - update(topPageA, scrollXA, scrollYA, zoom, rotate, gFalse, - addToHist && topPageA != topPage, gTrue); - break; - case destFitV: - case destFitBV: - //~ do fit: need a function similar to zoomToRect which will - //~ accept an absolute left coordinate (rather than centering) - if (dest->getChangeLeft()) { - cvtUserToDev(topPageA, dest->getLeft(), 0, &dx, &dy); - scrollXA = dx; - } else { - scrollXA = scrollX; - } - scrollYA = continuousMode ? -1 : 0; - update(topPageA, scrollXA, scrollYA, zoom, rotate, gFalse, - addToHist && topPageA != topPage, gTrue); - break; - case destFitR: - zoomToRect(topPageA, dest->getLeft(), dest->getTop(), - dest->getRight(), dest->getBottom()); - break; - } -} - -void PDFCore::update(int topPageA, int scrollXA, int scrollYA, - double zoomA, int rotateA, GBool force, - GBool addToHist, GBool adjustScrollX) { - double hDPI, vDPI, dpiA, uw, uh, ut; - int w, h, t, x0, x1, y0, y1, x, y; - int rot; - int pg0, pg1; - PDFCoreTile *tile; - PDFCorePage *page; - PDFHistory *hist; - SplashColor xorColor; - GBool needUpdate; - int i, j; - - // check for document and valid page number - if (!doc) { - // save the new settings - zoom = zoomA; - rotate = rotateA; - return; - } - if (topPageA <= 0 || topPageA > doc->getNumPages()) { - return; - } - - needUpdate = gFalse; - - // check for changes to the PDF file - if ((force || (!continuousMode && topPage != topPageA)) && - checkForNewFile()) { - if (loadFile(doc->getFileName()) == errNone) { - if (topPageA > doc->getNumPages()) { - topPageA = doc->getNumPages(); - } - needUpdate = gTrue; - } - } - - // compute the DPI - if (continuousMode) { - uw = maxUnscaledPageW; - uh = maxUnscaledPageH; - rot = rotateA; - } else { - uw = doc->getPageCropWidth(topPageA); - uh = doc->getPageCropHeight(topPageA); - rot = rotateA + doc->getPageRotate(topPageA); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - } - if (rot == 90 || rot == 270) { - ut = uw; uw = uh; uh = ut; - } - if (zoomA == zoomPage) { - hDPI = (drawAreaWidth / uw) * 72; - if (continuousMode) { - vDPI = ((drawAreaHeight - continuousModePageSpacing) / uh) * 72; - } else { - vDPI = (drawAreaHeight / uh) * 72; - } - dpiA = (hDPI < vDPI) ? hDPI : vDPI; - } else if (zoomA == zoomWidth) { - dpiA = (drawAreaWidth / uw) * 72; - } else { - dpiA = 0.01 * zoomA * 72; - } - // this can happen if the window hasn't been sized yet - if (dpiA <= 0) { - dpiA = 1; - } - - // if the display properties have changed, create a new PDFCorePage - // object - if (force || pages->getLength() == 0 || - (!continuousMode && topPageA != topPage) || - fabs(zoomA - zoom) > 1e-8 || fabs(dpiA - dpi) > 1e-8 || - rotateA != rotate) { - needUpdate = gTrue; - setSelection(0, 0, 0, 0, 0); -#ifdef HIGHLIGHTED_REGIONS - selectedRegion = NULL; -#endif - while (pages->getLength() > 0) { - delete (PDFCorePage *)pages->del(0); - } - zoom = zoomA; - rotate = rotateA; - dpi = dpiA; - if (continuousMode) { - maxPageW = totalDocH = 0; - pageY = (int *)greallocn(pageY, doc->getNumPages(), sizeof(int)); - for (i = 1; i <= doc->getNumPages(); ++i) { - pageY[i-1] = totalDocH; - w = (int)((doc->getPageCropWidth(i) * dpi) / 72 + 0.5); - h = (int)((doc->getPageCropHeight(i) * dpi) / 72 + 0.5); - rot = rotate + doc->getPageRotate(i); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - if (rot == 90 || rot == 270) { - t = w; w = h; h = t; - } - if (w > maxPageW) { - maxPageW = w; - } - totalDocH += h; - if (i < doc->getNumPages()) { - totalDocH += continuousModePageSpacing; - } - } - } else { - rot = rotate + doc->getPageRotate(topPageA); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - addPage(topPageA, rot); - } - } else { - // erase the selection - if (selectULX != selectLRX && selectULY != selectLRY) { - xorColor[0] = xorColor[1] = xorColor[2] = 0xff; - xorRectangle(selectPage, selectULX, selectULY, selectLRX, selectLRY, - new SplashSolidColor(xorColor)); - } - } - if (continuousMode) { - page = NULL; // make gcc happy - } else { - page = (PDFCorePage *)pages->get(0); - } - topPage = topPageA; - midPage = topPage; - - // adjust the scroll position - scrollX = scrollXA; - if (continuousMode && scrollYA < 0) { - scrollY = pageY[topPage - 1]; - } else { - scrollY = scrollYA; - } - if (continuousMode && adjustScrollX) { - rot = rotate + doc->getPageRotate(topPage); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - if (rot == 90 || rot == 270) { - w = (int)((doc->getPageCropHeight(topPage) * dpi) / 72 + 0.5); - } else { - w = (int)((doc->getPageCropWidth(topPage) * dpi) / 72 + 0.5); - } - if (scrollX < (maxPageW - w) / 2) { - scrollX = (maxPageW - w) / 2; - } - } - w = continuousMode ? maxPageW : page->w; - if (scrollX > w - drawAreaWidth) { - scrollX = w - drawAreaWidth; - } - if (scrollX < 0) { - scrollX = 0; - } - h = continuousMode ? totalDocH : page->h; - if (scrollY > h - drawAreaHeight) { - scrollY = h - drawAreaHeight; - } - if (scrollY < 0) { - scrollY = 0; - } - - // find topPage, and the first and last pages to be rasterized - if (continuousMode) { - //~ should use a binary search - for (i = 2; i <= doc->getNumPages(); ++i) { - if (pageY[i-1] > scrollY - drawAreaHeight / 2) { - break; - } - } - pg0 = i - 1; - for (i = pg0 + 1; i <= doc->getNumPages(); ++i) { - if (pageY[i-1] > scrollY) { - break; - } - } - topPage = i - 1; - for (i = topPage + 1; i <= doc->getNumPages(); ++i) { - if (pageY[i-1] > scrollY + drawAreaHeight / 2) { - break; - } - } - midPage = i - 1; - for (i = midPage + 1; i <= doc->getNumPages(); ++i) { - if (pageY[i-1] > scrollY + drawAreaHeight + drawAreaHeight / 2) { - break; - } - } - pg1 = i - 1; - - // delete pages that are no longer needed and insert new pages - // objects that are needed - while (pages->getLength() > 0 && - ((PDFCorePage *)pages->get(0))->page < pg0) { - delete (PDFCorePage *)pages->del(0); - } - i = pages->getLength() - 1; - while (i > 0 && ((PDFCorePage *)pages->get(i))->page > pg1) { - delete (PDFCorePage *)pages->del(i--); - } - j = pages->getLength() > 0 ? ((PDFCorePage *)pages->get(0))->page - 1 - : pg1; - for (i = pg0; i <= j; ++i) { - rot = rotate + doc->getPageRotate(i); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - addPage(i, rot); - } - j = ((PDFCorePage *)pages->get(pages->getLength() - 1))->page; - for (i = j + 1; i <= pg1; ++i) { - rot = rotate + doc->getPageRotate(i); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - addPage(i, rot); - } - - } else { - pg0 = pg1 = topPage; - } - - // delete tiles that are no longer needed - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - j = 0; - while (j < page->tiles->getLength()) { - tile = (PDFCoreTile *)page->tiles->get(j); - if (continuousMode) { - y0 = pageY[page->page - 1] + tile->yMin; - y1 = pageY[page->page - 1] + tile->yMax; - } else { - y0 = tile->yMin; - y1 = tile->yMax; - } - if (tile->xMax < scrollX - drawAreaWidth / 2 || - tile->xMin > scrollX + drawAreaWidth + drawAreaWidth / 2 || - y1 < scrollY - drawAreaHeight / 2 || - y0 > scrollY + drawAreaHeight + drawAreaHeight / 2) { - delete (PDFCoreTile *)page->tiles->del(j); - } else { - ++j; - } - } - } - - // update page positions - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - page->xDest = -scrollX; - if (continuousMode) { - page->yDest = pageY[page->page - 1] - scrollY; - } else { - page->yDest = -scrollY; - } - if (continuousMode) { - if (page->w < maxPageW) { - page->xDest += (maxPageW - page->w) / 2; - } - if (maxPageW < drawAreaWidth) { - page->xDest += (drawAreaWidth - maxPageW) / 2; - } - } else if (page->w < drawAreaWidth) { - page->xDest += (drawAreaWidth - page->w) / 2; - } - if (continuousMode && totalDocH < drawAreaHeight) { - page->yDest += (drawAreaHeight - totalDocH) / 2; - } else if (!continuousMode && page->h < drawAreaHeight) { - page->yDest += (drawAreaHeight - page->h) / 2; - } - } - - // rasterize any new tiles - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - x0 = page->xDest; - x1 = x0 + page->w - 1; - if (x0 < -drawAreaWidth / 2) { - x0 = -drawAreaWidth / 2; - } - if (x1 > drawAreaWidth + drawAreaWidth / 2) { - x1 = drawAreaWidth + drawAreaWidth / 2; - } - x0 = ((x0 - page->xDest) / page->tileW) * page->tileW; - x1 = ((x1 - page->xDest) / page->tileW) * page->tileW; - y0 = page->yDest; - y1 = y0 + page->h - 1; - if (y0 < -drawAreaHeight / 2) { - y0 = -drawAreaHeight / 2; - } - if (y1 > drawAreaHeight + drawAreaHeight / 2) { - y1 = drawAreaHeight + drawAreaHeight / 2; - } - y0 = ((y0 - page->yDest) / page->tileH) * page->tileH; - y1 = ((y1 - page->yDest) / page->tileH) * page->tileH; - for (y = y0; y <= y1; y += page->tileH) { - for (x = x0; x <= x1; x += page->tileW) { - needTile(page, x, y); - } - } - } - - // update tile positions - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - for (j = 0; j < page->tiles->getLength(); ++j) { - tile = (PDFCoreTile *)page->tiles->get(j); - tile->xDest = tile->xMin - scrollX; - if (continuousMode) { - tile->yDest = tile->yMin + pageY[page->page - 1] - scrollY; - } else { - tile->yDest = tile->yMin - scrollY; - } - if (continuousMode) { - if (page->w < maxPageW) { - tile->xDest += (maxPageW - page->w) / 2; - } - if (maxPageW < drawAreaWidth) { - tile->xDest += (drawAreaWidth - maxPageW) / 2; - } - } else if (page->w < drawAreaWidth) { - tile->xDest += (drawAreaWidth - page->w) / 2; - } - if (continuousMode && totalDocH < drawAreaHeight) { - tile->yDest += (drawAreaHeight - totalDocH) / 2; - } else if (!continuousMode && page->h < drawAreaHeight) { - tile->yDest += (drawAreaHeight - page->h) / 2; - } - } - } - - // redraw the selection - if (selectULX != selectLRX && selectULY != selectLRY) { - xorColor[0] = xorColor[1] = xorColor[2] = 0xff; - xorRectangle(selectPage, selectULX, selectULY, selectLRX, selectLRY, - new SplashSolidColor(xorColor)); - } - - // redraw the window - redrawWindow(0, 0, drawAreaWidth, drawAreaHeight, needUpdate); - updateScrollbars(); - - // add to history - if (addToHist) { - if (++historyCur == pdfHistorySize) { - historyCur = 0; - } - hist = &history[historyCur]; - if (hist->fileName) { - delete hist->fileName; - } - if (doc->getFileName()) { - hist->fileName = doc->getFileName()->copy(); - } else { - hist->fileName = NULL; - } - hist->page = topPage; - if (historyBLen < pdfHistorySize) { - ++historyBLen; - } - historyFLen = 0; - } -} - -void PDFCore::addPage(int pg, int rot) { - PDFCorePage *page; - int w, h, t, tileW, tileH, i; - - w = (int)((doc->getPageCropWidth(pg) * dpi) / 72 + 0.5); - h = (int)((doc->getPageCropHeight(pg) * dpi) / 72 + 0.5); - if (rot == 90 || rot == 270) { - t = w; w = h; h = t; - } - tileW = 2 * drawAreaWidth; - if (tileW < 1500) { - tileW = 1500; - } - if (tileW > w) { - // tileW can't be zero -- we end up with div-by-zero problems - tileW = w ? w : 1; - } - tileH = 2 * drawAreaHeight; - if (tileH < 1500) { - tileH = 1500; - } - if (tileH > h) { - // tileH can't be zero -- we end up with div-by-zero problems - tileH = h ? h : 1; - } - page = new PDFCorePage(pg, w, h, tileW, tileH); -#ifdef HIGHLIGHTED_REGIONS - PDFRegion *region; - for (i = 0; i < regions->getLength(); ++i) { - region = (PDFRegion *)regions->get(i); - if (region->page == pg) { - page->regions->append(region); - } - } -#endif - for (i = 0; - i < pages->getLength() && pg > ((PDFCorePage *)pages->get(i))->page; - ++i) ; - pages->insert(i, page); -} - -void PDFCore::needTile(PDFCorePage *page, int x, int y) { - PDFCoreTile *tile; - TextOutputDev *textOut; - int xDest, yDest, sliceW, sliceH; - int i; - - for (i = 0; i < page->tiles->getLength(); ++i) { - tile = (PDFCoreTile *)page->tiles->get(i); - if (x == tile->xMin && y == tile->yMin) { - return; - } - } - - setBusyCursor(gTrue); - - sliceW = page->tileW; - if (x + sliceW > page->w) { - sliceW = page->w - x; - } - sliceH = page->tileH; - if (y + sliceH > page->h) { - sliceH = page->h - y; - } - - xDest = x - scrollX; - if (continuousMode) { - yDest = y + pageY[page->page - 1] - scrollY; - } else { - yDest = y - scrollY; - } - if (continuousMode) { - if (page->w < maxPageW) { - xDest += (maxPageW - page->w) / 2; - } - if (maxPageW < drawAreaWidth) { - xDest += (drawAreaWidth - maxPageW) / 2; - } - } else if (page->w < drawAreaWidth) { - xDest += (drawAreaWidth - page->w) / 2; - } - if (continuousMode && totalDocH < drawAreaHeight) { - yDest += (drawAreaHeight - totalDocH) / 2; - } else if (!continuousMode && page->h < drawAreaHeight) { - yDest += (drawAreaHeight - page->h) / 2; - } - curTile = tile = newTile(xDest, yDest); - curPage = page; - tile->xMin = x; - tile->yMin = y; - tile->xMax = x + sliceW; - tile->yMax = y + sliceH; - tile->edges = 0; - if (tile->xMin == 0) { - tile->edges |= pdfCoreTileLeftEdge; - } - if (tile->xMax == page->w) { - tile->edges |= pdfCoreTileRightEdge; - } - if (continuousMode) { - if (tile->yMin == 0) { - tile->edges |= pdfCoreTileTopSpace; - if (page->page == 1) { - tile->edges |= pdfCoreTileTopEdge; - } - } - if (tile->yMax == page->h) { - tile->edges |= pdfCoreTileBottomSpace; - if (page->page == doc->getNumPages()) { - tile->edges |= pdfCoreTileBottomEdge; - } - } - } else { - if (tile->yMin == 0) { - tile->edges |= pdfCoreTileTopEdge; - } - if (tile->yMax == page->h) { - tile->edges |= pdfCoreTileBottomEdge; - } - } - doc->displayPageSlice(out, page->page, dpi, dpi, rotate, - gFalse, gTrue, gFalse, x, y, sliceW, sliceH); - tile->bitmap = out->takeBitmap(); - memcpy(tile->ctm, out->getDefCTM(), 6 * sizeof(double)); - memcpy(tile->ictm, out->getDefICTM(), 6 * sizeof(double)); - if (!page->links) { - page->links = doc->getLinks(page->page); - } - if (!page->text) { - if ((textOut = new TextOutputDev(NULL, gTrue, 0, gFalse, gFalse))) { - doc->displayPage(textOut, page->page, dpi, dpi, rotate, - gFalse, gTrue, gFalse); - page->text = textOut->takeText(); - delete textOut; - } - } - page->tiles->append(tile); - curTile = NULL; - curPage = NULL; -#ifdef HIGHLIGHTED_REGIONS - for (i = 0; i < page->regions->getLength(); ++i) { - xorHighlight((PDFRegion *)page->regions->get(i), - highlightNone, highlightNormal, tile); - } -#endif - - setBusyCursor(gFalse); -} - -GBool PDFCore::gotoNextPage(int inc, GBool top) { - int pg, scrollYA; - - if (!doc || doc->getNumPages() == 0 || topPage >= doc->getNumPages()) { - return gFalse; - } - if ((pg = topPage + inc) > doc->getNumPages()) { - pg = doc->getNumPages(); - } - if (continuousMode) { - scrollYA = -1; - } else if (top) { - scrollYA = 0; - } else { - scrollYA = scrollY; - } - update(pg, scrollX, scrollYA, zoom, rotate, gFalse, gTrue, gTrue); - return gTrue; -} - -GBool PDFCore::gotoPrevPage(int dec, GBool top, GBool bottom) { - int pg, scrollYA; - - if (!doc || doc->getNumPages() == 0 || topPage <= 1) { - return gFalse; - } - if ((pg = topPage - dec) < 1) { - pg = 1; - } - if (continuousMode) { - scrollYA = -1; - } else if (top) { - scrollYA = 0; - } else if (bottom) { - scrollYA = ((PDFCorePage *)pages->get(0))->h - drawAreaHeight; - if (scrollYA < 0) { - scrollYA = 0; - } - } else { - scrollYA = scrollY; - } - update(pg, scrollX, scrollYA, zoom, rotate, gFalse, gTrue, gTrue); - return gTrue; -} - -GBool PDFCore::gotoNamedDestination(GString *dest) { - LinkDest *d; - - if (!doc) { - return gFalse; - } - if (!(d = doc->findDest(dest))) { - return gFalse; - } - displayDest(d, zoom, rotate, gTrue); - delete d; - return gTrue; -} - -GBool PDFCore::goForward() { - int pg; - - if (historyFLen == 0) { - return gFalse; - } - if (++historyCur == pdfHistorySize) { - historyCur = 0; - } - --historyFLen; - ++historyBLen; - if (!doc || history[historyCur].fileName->cmp(doc->getFileName()) != 0) { - if (loadFile(history[historyCur].fileName) != errNone) { - return gFalse; - } - } - pg = history[historyCur].page; - update(pg, scrollX, continuousMode ? -1 : scrollY, - zoom, rotate, gFalse, gFalse, gTrue); - return gTrue; -} - -GBool PDFCore::goBackward() { - int pg; - - if (historyBLen <= 1) { - return gFalse; - } - if (--historyCur < 0) { - historyCur = pdfHistorySize - 1; - } - --historyBLen; - ++historyFLen; - if (!doc || history[historyCur].fileName->cmp(doc->getFileName()) != 0) { - if (loadFile(history[historyCur].fileName) != errNone) { - return gFalse; - } - } - pg = history[historyCur].page; - update(pg, scrollX, continuousMode ? -1 : scrollY, - zoom, rotate, gFalse, gFalse, gTrue); - return gTrue; -} - -void PDFCore::scrollLeft(int nCols) { - scrollTo(scrollX - nCols, scrollY); -} - -void PDFCore::scrollRight(int nCols) { - scrollTo(scrollX + nCols, scrollY); -} - -void PDFCore::scrollUp(int nLines) { - scrollTo(scrollX, scrollY - nLines); -} - -void PDFCore::scrollUpPrevPage(int nLines) { - if (!continuousMode && scrollY == 0) { - gotoPrevPage(1, gFalse, gTrue); - } else { - scrollTo(scrollX, scrollY - nLines); - } -} - -void PDFCore::scrollDown(int nLines) { - scrollTo(scrollX, scrollY + nLines); -} - -void PDFCore::scrollDownNextPage(int nLines) { - if (!continuousMode && - scrollY >= ((PDFCorePage *)pages->get(0))->h - drawAreaHeight) { - gotoNextPage(1, gTrue); - } else { - scrollTo(scrollX, scrollY + nLines); - } -} - -void PDFCore::scrollPageUp() { - if (!continuousMode && scrollY == 0) { - gotoPrevPage(1, gFalse, gTrue); - } else { - scrollTo(scrollX, scrollY - drawAreaHeight); - } -} - -void PDFCore::scrollPageDown() { - if (!continuousMode && - pages->getLength() > 0 && - scrollY >= ((PDFCorePage *)pages->get(0))->h - drawAreaHeight) { - gotoNextPage(1, gTrue); - } else { - scrollTo(scrollX, scrollY + drawAreaHeight); - } -} - -void PDFCore::scrollTo(int x, int y) { - update(topPage, x, y < 0 ? 0 : y, zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::scrollToLeftEdge() { - update(topPage, 0, scrollY, zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::scrollToRightEdge() { - PDFCorePage *page; - - page = (PDFCorePage *)pages->get(0); - update(topPage, page->w - drawAreaWidth, scrollY, - zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::scrollToTopEdge() { - int y; - - y = continuousMode ? pageY[topPage - 1] : 0; - update(topPage, scrollX, y, zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::scrollToBottomEdge() { - PDFCorePage *page; - int y, i; - - for (i = pages->getLength() - 1; i > 0; --i) { - page = (PDFCorePage *)pages->get(i); - if (page->yDest < drawAreaHeight) { - break; - } - } - page = (PDFCorePage *)pages->get(i); - if (continuousMode) { - y = pageY[page->page - 1] + page->h - drawAreaHeight; - } else { - y = page->h - drawAreaHeight; - } - update(topPage, scrollX, y, zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::scrollToTopLeft() { - int y; - - y = continuousMode ? pageY[topPage - 1] : 0; - update(topPage, 0, y, zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::scrollToBottomRight() { - PDFCorePage *page; - int x, y, i; - - for (i = pages->getLength() - 1; i > 0; --i) { - page = (PDFCorePage *)pages->get(i); - if (page->yDest < drawAreaHeight) { - break; - } - } - page = (PDFCorePage *)pages->get(i); - x = page->w - drawAreaWidth; - if (continuousMode) { - y = pageY[page->page - 1] + page->h - drawAreaHeight; - } else { - y = page->h - drawAreaHeight; - } - update(topPage, x, y, zoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::zoomToRect(int pg, double ulx, double uly, - double lrx, double lry) { - int x0, y0, x1, y1, u, sx, sy; - double rx, ry, newZoom, t; - PDFCorePage *p; - - cvtUserToDev(pg, ulx, uly, &x0, &y0); - cvtUserToDev(pg, lrx, lry, &x1, &y1); - if (x0 > x1) { - u = x0; x0 = x1; x1 = u; - } - if (y0 > y1) { - u = y0; y0 = y1; y1 = u; - } - rx = (double)drawAreaWidth / (double)(x1 - x0); - ry = (double)drawAreaHeight / (double)(y1 - y0); - if (rx < ry) { - newZoom = rx * (dpi / (0.01 * 72)); - sx = (int)(rx * x0); - t = (drawAreaHeight * (x1 - x0)) / drawAreaWidth; - sy = (int)(rx * (y0 + y1 - t) / 2); - if (continuousMode) { - if ((p = findPage(pg)) && p->w < maxPageW) { - sx += (int)(0.5 * rx * (maxPageW - p->w)); - } - u = (pg - 1) * continuousModePageSpacing; - sy += (int)(rx * (pageY[pg - 1] - u)) + u; - } - } else { - newZoom = ry * (dpi / (0.01 * 72)); - t = (drawAreaWidth * (y1 - y0)) / drawAreaHeight; - sx = (int)(ry * (x0 + x1 - t) / 2); - sy = (int)(ry * y0); - if (continuousMode) { - if ((p = findPage(pg)) && p->w < maxPageW) { - sx += (int)(0.5 * rx * (maxPageW - p->w)); - } - u = (pg - 1) * continuousModePageSpacing; - sy += (int)(ry * (pageY[pg - 1] - u)) + u; - } - } - update(pg, sx, sy, newZoom, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::zoomCentered(double zoomA) { - int sx, sy, rot, hAdjust, vAdjust, i; - double dpi1, dpi2, pageW, pageH; - PDFCorePage *page; - - if (zoomA == zoomPage) { - if (continuousMode) { - pageW = (rotate == 90 || rotate == 270) ? maxUnscaledPageH - : maxUnscaledPageW; - pageH = (rotate == 90 || rotate == 270) ? maxUnscaledPageW - : maxUnscaledPageH; - dpi1 = 72.0 * (double)drawAreaWidth / pageW; - dpi2 = 72.0 * (double)(drawAreaHeight - continuousModePageSpacing) / - pageH; - if (dpi2 < dpi1) { - dpi1 = dpi2; - } - } else { - // in single-page mode, sx=sy=0 -- so dpi1 is irrelevant - dpi1 = dpi; - } - sx = 0; - - } else if (zoomA == zoomWidth) { - if (continuousMode) { - pageW = (rotate == 90 || rotate == 270) ? maxUnscaledPageH - : maxUnscaledPageW; - } else { - rot = rotate + doc->getPageRotate(topPage); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - pageW = (rot == 90 || rot == 270) ? doc->getPageCropHeight(topPage) - : doc->getPageCropWidth(topPage); - } - dpi1 = 72.0 * (double)drawAreaWidth / pageW; - sx = 0; - - } else if (zoomA <= 0) { - return; - - } else { - dpi1 = 72.0 * zoomA / 100.0; - if ((page = (PDFCorePage *)pages->get(0)) && page->xDest > 0) { - hAdjust = page->xDest; - } else { - hAdjust = 0; - } - sx = (int)((scrollX - hAdjust + drawAreaWidth / 2) * (dpi1 / dpi)) - - drawAreaWidth / 2; - if (sx < 0) { - sx = 0; - } - } - - if (continuousMode) { - // we can't just multiply scrollY by dpi1/dpi -- the rounding - // errors add up (because the pageY values are integers) -- so - // we compute the pageY values at the new zoom level instead - sy = 0; - for (i = 1; i < topPage; ++i) { - rot = rotate + doc->getPageRotate(i); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - if (rot == 90 || rot == 270) { - sy += (int)((doc->getPageCropWidth(i) * dpi1) / 72 + 0.5); - } else { - sy += (int)((doc->getPageCropHeight(i) * dpi1) / 72 + 0.5); - } - } - vAdjust = (topPage - 1) * continuousModePageSpacing; - sy = sy + (int)((scrollY - pageY[topPage - 1] + drawAreaHeight / 2) - * (dpi1 / dpi)) - + vAdjust - drawAreaHeight / 2; - } else { - sy = (int)((scrollY + drawAreaHeight / 2) * (dpi1 / dpi)) - - drawAreaHeight / 2; - } - - update(topPage, sx, sy, zoomA, rotate, gFalse, gFalse, gFalse); -} - -// Zoom so that the current page(s) fill the window width. Maintain -// the vertical center. -void PDFCore::zoomToCurrentWidth() { - double w, maxW, dpi1; - int sx, sy, vAdjust, rot, i; - - // compute the maximum page width of visible pages - rot = rotate + doc->getPageRotate(topPage); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - if (rot == 90 || rot == 270) { - maxW = doc->getPageCropHeight(topPage); - } else { - maxW = doc->getPageCropWidth(topPage); - } - if (continuousMode) { - for (i = topPage + 1; - i < doc->getNumPages() && pageY[i-1] < scrollY + drawAreaHeight; - ++i) { - rot = rotate + doc->getPageRotate(i); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - if (rot == 90 || rot == 270) { - w = doc->getPageCropHeight(i); - } else { - w = doc->getPageCropWidth(i); - } - if (w > maxW) { - maxW = w; - } - } - } - - // compute the resolution - dpi1 = (drawAreaWidth / maxW) * 72; - - // compute the horizontal scroll position - if (continuousMode) { - sx = ((int)(maxPageW * dpi1 / dpi) - drawAreaWidth) / 2; - } else { - sx = 0; - } - - // compute the vertical scroll position - if (continuousMode) { - // we can't just multiply scrollY by dpi1/dpi -- the rounding - // errors add up (because the pageY values are integers) -- so - // we compute the pageY values at the new zoom level instead - sy = 0; - for (i = 1; i < topPage; ++i) { - rot = rotate + doc->getPageRotate(i); - if (rot >= 360) { - rot -= 360; - } else if (rot < 0) { - rot += 360; - } - if (rot == 90 || rot == 270) { - sy += (int)((doc->getPageCropWidth(i) * dpi1) / 72 + 0.5); - } else { - sy += (int)((doc->getPageCropHeight(i) * dpi1) / 72 + 0.5); - } - } - vAdjust = (topPage - 1) * continuousModePageSpacing; - sy = sy + (int)((scrollY - pageY[topPage - 1] + drawAreaHeight / 2) - * (dpi1 / dpi)) - + vAdjust - drawAreaHeight / 2; - } else { - sy = (int)((scrollY + drawAreaHeight / 2) * (dpi1 / dpi)) - - drawAreaHeight / 2; - } - - update(topPage, sx, sy, (dpi1 * 100) / 72, rotate, gFalse, gFalse, gFalse); -} - -void PDFCore::setContinuousMode(GBool cm) { - if (continuousMode != cm) { - continuousMode = cm; - update(topPage, scrollX, -1, zoom, rotate, gTrue, gFalse, gTrue); - } -} - -void PDFCore::setSelection(int newSelectPage, - int newSelectULX, int newSelectULY, - int newSelectLRX, int newSelectLRY) { - int x0, y0, x1, y1, py; - GBool haveSel, newHaveSel; - GBool needRedraw, needScroll; - GBool moveLeft, moveRight, moveTop, moveBottom; - SplashColor xorColor; - PDFCorePage *page; - -#ifdef HIGHLIGHTED_REGIONS - // erase any selected highlight - if (selectedRegion) { - xorHighlight(selectedRegion, highlightSelected, highlightNormal); - selectedRegion = NULL; - } -#endif - - haveSel = selectULX != selectLRX && selectULY != selectLRY; - newHaveSel = newSelectULX != newSelectLRX && newSelectULY != newSelectLRY; - - // erase old selection on off-screen bitmap - needRedraw = gFalse; - if (haveSel) { - xorColor[0] = xorColor[1] = xorColor[2] = 0xff; - xorRectangle(selectPage, selectULX, selectULY, selectLRX, selectLRY, - new SplashSolidColor(xorColor)); - needRedraw = gTrue; - } - - // draw new selection on off-screen bitmap - if (newHaveSel) { - xorColor[0] = xorColor[1] = xorColor[2] = 0xff; - xorRectangle(newSelectPage, newSelectULX, newSelectULY, - newSelectLRX, newSelectLRY, - new SplashSolidColor(xorColor)); - needRedraw = gTrue; - } - - // check which edges moved - if (!haveSel || newSelectPage != selectPage) { - moveLeft = moveTop = moveRight = moveBottom = gTrue; - } else { - moveLeft = newSelectULX != selectULX; - moveTop = newSelectULY != selectULY; - moveRight = newSelectLRX != selectLRX; - moveBottom = newSelectLRY != selectLRY; - } - - // redraw currently visible part of bitmap - if (needRedraw) { - if (!haveSel) { - page = findPage(newSelectPage); - x0 = newSelectULX; - y0 = newSelectULY; - x1 = newSelectLRX; - y1 = newSelectLRY; - redrawWindow(page->xDest + x0, page->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, gFalse); - } else if (!newHaveSel) { - if ((page = findPage(selectPage))) { - x0 = selectULX; - y0 = selectULY; - x1 = selectLRX; - y1 = selectLRY; - redrawWindow(page->xDest + x0, page->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, gFalse); - } - } else { - page = findPage(newSelectPage); - if (moveLeft) { - x0 = newSelectULX < selectULX ? newSelectULX : selectULX; - y0 = newSelectULY < selectULY ? newSelectULY : selectULY; - x1 = newSelectULX > selectULX ? newSelectULX : selectULX; - y1 = newSelectLRY > selectLRY ? newSelectLRY : selectLRY; - redrawWindow(page->xDest + x0, page->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, gFalse); - } - if (moveRight) { - x0 = newSelectLRX < selectLRX ? newSelectLRX : selectLRX; - y0 = newSelectULY < selectULY ? newSelectULY : selectULY; - x1 = newSelectLRX > selectLRX ? newSelectLRX : selectLRX; - y1 = newSelectLRY > selectLRY ? newSelectLRY : selectLRY; - redrawWindow(page->xDest + x0, page->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, gFalse); - } - if (moveTop) { - x0 = newSelectULX < selectULX ? newSelectULX : selectULX; - y0 = newSelectULY < selectULY ? newSelectULY : selectULY; - x1 = newSelectLRX > selectLRX ? newSelectLRX : selectLRX; - y1 = newSelectULY > selectULY ? newSelectULY : selectULY; - redrawWindow(page->xDest + x0, page->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, gFalse); - } - if (moveBottom) { - x0 = newSelectULX < selectULX ? newSelectULX : selectULX; - y0 = newSelectLRY < selectLRY ? newSelectLRY : selectLRY; - x1 = newSelectLRX > selectLRX ? newSelectLRX : selectLRX; - y1 = newSelectLRY > selectLRY ? newSelectLRY : selectLRY; - redrawWindow(page->xDest + x0, page->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, gFalse); - } - } - } - - // switch to new selection coords - selectPage = newSelectPage; - selectULX = newSelectULX; - selectULY = newSelectULY; - selectLRX = newSelectLRX; - selectLRY = newSelectLRY; - - // scroll if necessary - if (newHaveSel) { - page = findPage(selectPage); - needScroll = gFalse; - x0 = scrollX; - y0 = scrollY; - if (moveLeft && page->xDest + selectULX < 0) { - x0 += page->xDest + selectULX; - needScroll = gTrue; - } else if (moveRight && page->xDest + selectLRX >= drawAreaWidth) { - x0 += page->xDest + selectLRX - drawAreaWidth; - needScroll = gTrue; - } else if (moveLeft && page->xDest + selectULX >= drawAreaWidth) { - x0 += page->xDest + selectULX - drawAreaWidth; - needScroll = gTrue; - } else if (moveRight && page->xDest + selectLRX < 0) { - x0 += page->xDest + selectLRX; - needScroll = gTrue; - } - py = continuousMode ? pageY[selectPage - 1] : 0; - if (moveTop && py + selectULY < y0) { - y0 = py + selectULY; - needScroll = gTrue; - } else if (moveBottom && py + selectLRY >= y0 + drawAreaHeight) { - y0 = py + selectLRY - drawAreaHeight; - needScroll = gTrue; - } else if (moveTop && py + selectULY >= y0 + drawAreaHeight) { - y0 = py + selectULY - drawAreaHeight; - needScroll = gTrue; - } else if (moveBottom && py + selectLRY < y0) { - y0 = py + selectLRY; - needScroll = gTrue; - } - if (needScroll) { - scrollTo(x0, y0); - } - } -} - -void PDFCore::moveSelection(int pg, int x, int y) { - int newSelectULX, newSelectULY, newSelectLRX, newSelectLRY; - - // don't allow selections to span multiple pages - if (pg != selectPage) { - return; - } - - // move appropriate edges of selection - if (lastDragLeft) { - if (x < selectLRX) { - newSelectULX = x; - newSelectLRX = selectLRX; - } else { - newSelectULX = selectLRX; - newSelectLRX = x; - lastDragLeft = gFalse; - } - } else { - if (x > selectULX) { - newSelectULX = selectULX; - newSelectLRX = x; - } else { - newSelectULX = x; - newSelectLRX = selectULX; - lastDragLeft = gTrue; - } - } - if (lastDragTop) { - if (y < selectLRY) { - newSelectULY = y; - newSelectLRY = selectLRY; - } else { - newSelectULY = selectLRY; - newSelectLRY = y; - lastDragTop = gFalse; - } - } else { - if (y > selectULY) { - newSelectULY = selectULY; - newSelectLRY = y; - } else { - newSelectULY = y; - newSelectLRY = selectULY; - lastDragTop = gTrue; - } - } - - // redraw the selection - setSelection(selectPage, newSelectULX, newSelectULY, - newSelectLRX, newSelectLRY); -} - -void PDFCore::xorRectangle(int pg, int x0, int y0, int x1, int y1, - SplashPattern *pattern, PDFCoreTile *oneTile) { - Splash *splash; - SplashPath *path; - PDFCorePage *page; - PDFCoreTile *tile; - SplashCoord xx0, yy0, xx1, yy1; - int xi, yi, wi, hi; - int i; - - if ((page = findPage(pg))) { - for (i = 0; i < page->tiles->getLength(); ++i) { - tile = (PDFCoreTile *)page->tiles->get(i); - if (!oneTile || tile == oneTile) { - splash = new Splash(tile->bitmap, gFalse); - splash->setFillPattern(pattern->copy()); - xx0 = (SplashCoord)(x0 - tile->xMin); - yy0 = (SplashCoord)(y0 - tile->yMin); - xx1 = (SplashCoord)(x1 - tile->xMin); - yy1 = (SplashCoord)(y1 - tile->yMin); - path = new SplashPath(); - path->moveTo(xx0, yy0); - path->lineTo(xx1, yy0); - path->lineTo(xx1, yy1); - path->lineTo(xx0, yy1); - path->close(); - splash->xorFill(path, gTrue); - delete path; - delete splash; - xi = x0 - tile->xMin; - wi = x1 - x0; - if (xi < 0) { - wi += xi; - xi = 0; - } - if (xi + wi > tile->bitmap->getWidth()) { - wi = tile->bitmap->getWidth() - xi; - } - yi = y0 - tile->yMin; - hi = y1 - y0; - if (yi < 0) { - hi += yi; - yi = 0; - } - if (yi + hi > tile->bitmap->getHeight()) { - hi = tile->bitmap->getHeight() - yi; - } - updateTileData(tile, xi, yi, wi, hi, gTrue); - } - } - } - delete pattern; -} - -GBool PDFCore::getSelection(int *pg, double *ulx, double *uly, - double *lrx, double *lry) { - if (selectULX == selectLRX || selectULY == selectLRY) { - return gFalse; - } - *pg = selectPage; - cvtDevToUser(selectPage, selectULX, selectULY, ulx, uly); - cvtDevToUser(selectPage, selectLRX, selectLRY, lrx, lry); - return gTrue; -} - -GString *PDFCore::extractText(int pg, double xMin, double yMin, - double xMax, double yMax) { - PDFCorePage *page; - TextOutputDev *textOut; - int x0, y0, x1, y1, t; - GString *s; - - if (!doc->okToCopy()) { - return NULL; - } - if ((page = findPage(pg))) { - cvtUserToDev(pg, xMin, yMin, &x0, &y0); - cvtUserToDev(pg, xMax, yMax, &x1, &y1); - if (x0 > x1) { - t = x0; x0 = x1; x1 = t; - } - if (y0 > y1) { - t = y0; y0 = y1; y1 = t; - } - s = page->text->getText(x0, y0, x1, y1); - } else { - textOut = new TextOutputDev(NULL, gTrue, 0, gFalse, gFalse); - if (textOut->isOk()) { - doc->displayPage(textOut, pg, dpi, dpi, rotate, gFalse, gTrue, gFalse); - textOut->cvtUserToDev(xMin, yMin, &x0, &y0); - textOut->cvtUserToDev(xMax, yMax, &x1, &y1); - if (x0 > x1) { - t = x0; x0 = x1; x1 = t; - } - if (y0 > y1) { - t = y0; y0 = y1; y1 = t; - } - s = textOut->getText(x0, y0, x1, y1); - } else { - s = new GString(); - } - delete textOut; - } - return s; -} - -GBool PDFCore::find(char *s, GBool caseSensitive, GBool next, GBool backward, - GBool onePageOnly) { - Unicode *u; - int len, i; - GBool ret; - - // convert to Unicode - len = strlen(s); - u = (Unicode *)gmallocn(len, sizeof(Unicode)); - for (i = 0; i < len; ++i) { - u[i] = (Unicode)(s[i] & 0xff); - } - - ret = findU(u, len, caseSensitive, next, backward, onePageOnly); - - gfree(u); - return ret; -} - -GBool PDFCore::findU(Unicode *u, int len, GBool caseSensitive, - GBool next, GBool backward, GBool onePageOnly) { - TextOutputDev *textOut; - double xMin, yMin, xMax, yMax; - PDFCorePage *page; - PDFCoreTile *tile; - int pg; - GBool startAtTop, startAtLast, stopAtLast; - - // check for zero-length string - if (len == 0) { - return gFalse; - } - - setBusyCursor(gTrue); - - // search current page starting at previous result, current - // selection, or top/bottom of page - startAtTop = startAtLast = gFalse; - xMin = yMin = xMax = yMax = 0; - pg = topPage; - if (next) { - startAtLast = gTrue; - } else if (selectULX != selectLRX && selectULY != selectLRY) { - pg = selectPage; - if (backward) { - xMin = selectULX - 1; - yMin = selectULY - 1; - } else { - xMin = selectULX + 1; - yMin = selectULY + 1; - } - } else { - startAtTop = gTrue; - } - if (!(page = findPage(pg))) { - displayPage(pg, zoom, rotate, gTrue, gFalse); - page = findPage(pg); - } - if (page->text->findText(u, len, startAtTop, gTrue, startAtLast, gFalse, - caseSensitive, backward, - &xMin, &yMin, &xMax, &yMax)) { - goto found; - } - - if (!onePageOnly) { - - // search following/previous pages - textOut = new TextOutputDev(NULL, gTrue, 0, gFalse, gFalse); - if (!textOut->isOk()) { - delete textOut; - goto notFound; - } - for (pg = backward ? pg - 1 : pg + 1; - backward ? pg >= 1 : pg <= doc->getNumPages(); - pg += backward ? -1 : 1) { - doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse); - if (textOut->findText(u, len, gTrue, gTrue, gFalse, gFalse, - caseSensitive, backward, - &xMin, &yMin, &xMax, &yMax)) { - delete textOut; - goto foundPage; - } - } - - // search previous/following pages - for (pg = backward ? doc->getNumPages() : 1; - backward ? pg > topPage : pg < topPage; - pg += backward ? -1 : 1) { - doc->displayPage(textOut, pg, 72, 72, 0, gFalse, gTrue, gFalse); - if (textOut->findText(u, len, gTrue, gTrue, gFalse, gFalse, - caseSensitive, backward, - &xMin, &yMin, &xMax, &yMax)) { - delete textOut; - goto foundPage; - } - } - delete textOut; - - } - - // search current page ending at previous result, current selection, - // or bottom/top of page - if (!startAtTop) { - xMin = yMin = xMax = yMax = 0; - if (next) { - stopAtLast = gTrue; - } else { - stopAtLast = gFalse; - xMax = selectLRX; - yMax = selectLRY; - } - if (page->text->findText(u, len, gTrue, gFalse, gFalse, stopAtLast, - caseSensitive, backward, - &xMin, &yMin, &xMax, &yMax)) { - goto found; - } - } - - // not found - notFound: - setBusyCursor(gFalse); - return gFalse; - - // found on a different page - foundPage: - update(pg, scrollX, continuousMode ? -1 : 0, zoom, rotate, gFalse, gTrue, - gTrue); - page = findPage(pg); - if (!page->text->findText(u, len, gTrue, gTrue, gFalse, gFalse, - caseSensitive, backward, - &xMin, &yMin, &xMax, &yMax)) { - // this can happen if coalescing is bad - goto notFound; - } - - // found: change the selection - found: - tile = (PDFCoreTile *)page->tiles->get(0); - setSelection(pg, (int)floor(xMin), (int)floor(yMin), - (int)ceil(xMax), (int)ceil(yMax)); - - setBusyCursor(gFalse); - return gTrue; -} - -#ifdef HIGHLIGHTED_REGIONS - -PDFRegion *PDFCore::addRegion(int pg, double xMin, double yMin, - double xMax, double yMax, - SplashColorPtr color, SplashColorPtr selectColor, - GBool selectable, char *label) { - PDFRegion *region; - PDFCorePage *page; - - setSelection(0, 0, 0, 0, 0); - region = new PDFRegion(); - region->page = pg; - region->xMin = xMin < xMax ? xMin : xMax; - region->xMax = xMin < xMax ? xMax : xMin; - region->yMin = yMin < yMax ? yMin : yMax; - region->yMax = yMin < yMax ? yMax : yMin; - splashColorCopy(region->color, color); - splashColorCopy(region->selectColor, selectColor); - region->selectable = selectable; - if (label) { - region->label = new GString(label); - } else { - region->label = NULL; - } - regions->append(region); - if ((page = findPage(pg))) { - page->regions->append(region); - xorHighlight(region, highlightNone, highlightNormal); - } - return region; -} - -void PDFCore::deleteRegion(PDFRegion *region) { - PDFCorePage *page; - int i; - - setSelection(0, 0, 0, 0, 0); - if ((page = findPage(region->page))) { - for (i = 0; i < page->regions->getLength(); ++i) { - if ((PDFRegion *)page->regions->get(i) == region) { - page->regions->del(i); - break; - } - } - xorHighlight(region, highlightNormal, highlightNone); - } - for (i = 0; i < regions->getLength(); ++i) { - if ((PDFRegion *)regions->get(i) == region) { - delete (PDFRegion *)regions->del(i); - break; - } - } -} - -void PDFCore::deleteAllRegions() { - GList *pageRegions; - PDFRegion *region; - PDFCorePage *page; - int i, j; - - setSelection(0, 0, 0, 0, 0); - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - pageRegions = page->regions; - page->regions = new GList(); - for (j = 0; j < pageRegions->getLength(); ++j) { - region = (PDFRegion *)pageRegions->get(j); - xorHighlight(region, highlightNormal, highlightNone); - } - delete pageRegions; - } - deleteGList(regions, PDFRegion); - regions = new GList(); -} - -int PDFCore::getNumRegions() { - return regions->getLength(); -} - -PDFRegion *PDFCore::getRegion(int idx) { - if (idx < 0 || idx >= regions->getLength()) { - return NULL; - } - return (PDFRegion *)regions->get(idx); -} - -void PDFCore::setSelectedRegion(PDFRegion *region) { - // kill the current selection or selected region - setSelection(selectPage, selectULX, selectULY, selectULX, selectULY); - - // select the new region - if ((selectedRegion = region)) { - xorHighlight(region, highlightNormal, highlightSelected); - } -} - -void PDFCore::makeRegionVisible(PDFRegion *region) { - PDFCorePage *page; - int xMin, yMin, xMax, yMax, x, y, py; - - if (!(page = findPage(region->page))) { - displayPage(region->page, zoom, rotate, gFalse, gTrue); - page = findPage(region->page); - } - cvtUserToDev(region->page, region->xMin, region->yMin, &xMin, &yMin); - cvtUserToDev(region->page, region->xMax, region->yMax, &xMax, &yMax); - if (xMin > xMax) { - x = xMin; xMin = xMax; xMax = x; - } - if (continuousMode) { - xMin += scrollX + page->xDest; - xMax += scrollX + page->xDest; - } - if (yMin > yMax) { - y = yMin; yMin = yMax; yMax = y; - } - x = scrollX; - y = scrollY; - if (xMax >= x + drawAreaWidth) { - x = xMax - drawAreaWidth; - } - if (xMin < x) { - x = xMin; - } - py = continuousMode ? pageY[region->page - 1] : 0; - if (py + yMax >= y + drawAreaHeight) { - y = py + yMax - drawAreaHeight; - } - if (py + yMin < y) { - y = py + yMin; - } - if (x != scrollX || y != scrollY) { - scrollTo(x, y); - } -} - -int PDFCore::loadHighlightFile(char *fileName, SplashColorPtr color, - SplashColorPtr selectColor, GBool selectable) { - return loadHighlightFile(HighlightFile::read(fileName), - color, selectColor, selectable); -} - -int PDFCore::loadHighlightFile(int (*getChar)(void *stream), void *stream, - SplashColorPtr color, - SplashColorPtr selectColor, GBool selectable) { - return loadHighlightFile(HighlightFile::read(getChar, stream, ""), - color, selectColor, selectable); -} - -int PDFCore::loadHighlightFile(HighlightFile *hf, SplashColorPtr color, - SplashColorPtr selectColor, GBool selectable) { - HighlightRange *range; - TextOutputDev *textOut; - int curPage; - double xi0, yi0, xi1, yi1, x0, y0, x1, y1; - int i; - - if (!hf) { - goto err0; - } - if (!hf->unitsAreCharacters()) { - error(errUnimplemented, -1, - "Highlight files using word offsets are not supported"); - goto err1; - } - - textOut = new TextOutputDev(NULL, gTrue, 0, gFalse, gFalse); - if (!textOut->isOk()) { - goto err2; - } - curPage = -1; - - for (i = 0; i < hf->getLength(); ++i) { - range = hf->get(i); - if (range->page >= 1 && range->page <= doc->getNumPages()) { - if (range->page != curPage) { - doc->displayPage(textOut, range->page, 72, 72, 0, - gFalse, gTrue, gFalse); - curPage = range->page; - } - if (textOut->findCharRange(range->pos, range->length, - &xi0, &yi0, &xi1, &yi1)) { - textOut->cvtDevToUser(xi0, yi0, &x0, &y0); - textOut->cvtDevToUser(xi1, yi1, &x1, &y1); - addRegion(range->page, x0, y0, x1, y1, color, selectColor, - selectable, NULL); - } else { - error(errSyntaxError, -1, - "Invalid character offset/length in highlight file"); - } - } else { - error(errSyntaxError, -1, "Invalid page number in highlight file"); - } - } - - delete textOut; - delete hf; - return errNone; - - err2: - delete textOut; - err1: - delete hf; - err0: - return errHighlightFile; -} - -GBool PDFCore::findSelectedRegion(int pg, int x, int y) { - PDFCorePage *page; - PDFRegion *region; - int x0, y0, x1, y1, x2, y2, t; - int i; - - if ((page = findPage(pg))) { - for (i = 0; i < page->regions->getLength(); ++i) { - region = (PDFRegion *)page->regions->get(i); - if (region->selectable) { - cvtUserToDev(region->page, region->xMin, region->yMin, &x0, &y0); - cvtUserToDev(region->page, region->xMax, region->yMax, &x1, &y1); - if (x0 > x1) { - t = x0; x0 = x1; x1 = t; - } - if (y0 > y1) { - t = y0; y0 = y1; y1 = t; - } - x2 = (x0 + x1) / 2; - y2 = (y0 + y1) / 2; - if (x >= x0 - 3 && x < x0 + 3) { - if (y >= y0 - 3 && y < y0 + 3) { - regionResizeX = -1; - regionResizeY = -1; - goto found; - } else if (y >= y1 - 3 && y < y1 + 3) { - regionResizeX = -1; - regionResizeY = 1; - goto found; - } else if (y >= y2 - 3 && y < y2 + 3) { - regionResizeX = -1; - regionResizeY = 0; - goto found; - } - } - if (x >= x1 - 3 && x < x1 + 3) { - if (y >= y0 - 3 && y < y0 + 3) { - regionResizeX = 1; - regionResizeY = -1; - goto found; - } else if (y >= y1 - 3 && y < y1 + 3) { - regionResizeX = 1; - regionResizeY = 1; - goto found; - } else if (y >= y2 - 3 && y < y2 + 3) { - regionResizeX = 1; - regionResizeY = 0; - goto found; - } - } - if (x >= x2 - 3 && x < x2 + 3) { - if (y >= y0 - 3 && y < y0 + 3) { - regionResizeX = 0; - regionResizeY = -1; - goto found; - } else if (y >= y1 - 3 && y < y1 + 3) { - regionResizeX = 0; - regionResizeY = 1; - goto found; - } - } - if (x >= x0 && x < x1 && y >= y0 && y < y1) { - regionResizeX = 0; - regionResizeY = 0; - goto found; - } - } - } - } - return gFalse; - - found: - selectedRegion = region; - return gTrue; -} - -void PDFCore::resizeRegion(int pg, int x, int y) { - int xMinI, yMinI, xMaxI, yMaxI, t; - int newXMinI, newYMinI, newXMaxI, newYMaxI; - int wxMin, wyMin, wxMax, wyMax; - double xMin, yMin, xMax, yMax; - int sx, sy, py, deltaX; - GBool needScroll; - SplashColor regionColor, handleColor; - PDFCorePage *page; - - // don't allow regions to span multiple pages - if (pg != selectedRegion->page) { - return; - } - - // convert region bounds to screen coordinates - cvtUserToDev(pg, selectedRegion->xMin, selectedRegion->yMin, &xMinI, &yMinI); - cvtUserToDev(pg, selectedRegion->xMax, selectedRegion->yMax, &xMaxI, &yMaxI); - if (xMinI > xMaxI) { - t = xMinI; xMinI = xMaxI; xMaxI = t; - } - if (yMinI > yMaxI) { - t = yMinI; yMinI = yMaxI; yMaxI = t; - } - - // move appropriate edge(s) of region - newXMinI = xMinI; - newXMaxI = xMaxI; - newYMinI = yMinI; - newYMaxI = yMaxI; - if (continuousMode) { - page = findPage(selectedRegion->page); - deltaX = scrollX + page->xDest; - } else { - deltaX = 0; - } - sx = scrollX - deltaX; - sy = scrollY; - py = continuousMode ? pageY[pg - 1] : 0; - needScroll = gFalse; - if (regionResizeX < 0) { - newXMinI = x < xMaxI ? x : xMaxI; - if (newXMinI < sx) { - sx = newXMinI; - needScroll = gTrue; - } else if (newXMinI > sx + drawAreaWidth) { - sx = newXMinI - drawAreaWidth; - needScroll = gTrue; - } - } else if (regionResizeX > 0) { - newXMaxI = x > xMinI ? x : xMinI; - if (newXMaxI < sx) { - sx = newXMaxI; - needScroll = gTrue; - } else if (newXMaxI > sx + drawAreaWidth) { - sx = newXMaxI - drawAreaWidth; - needScroll = gTrue; - } - } - sx += deltaX; - if (regionResizeY < 0) { - newYMinI = y < yMaxI ? y : yMaxI; - if (py + newYMinI < sy) { - sy = py + newYMinI; - needScroll = gTrue; - } else if (py + newYMinI > sy + drawAreaHeight) { - sy = py + newYMinI - drawAreaHeight; - needScroll = gTrue; - } - } else if (regionResizeY > 0) { - newYMaxI = y > yMinI ? y : yMinI; - if (py + newYMaxI < sy) { - sy = py + newYMaxI; - needScroll = gTrue; - } else if (py + newYMaxI > sy + drawAreaHeight) { - sy = py + newYMaxI - drawAreaHeight; - needScroll = gTrue; - } - } - cvtDevToUser(pg, newXMinI, newYMinI, &xMin, &yMin); - cvtDevToUser(pg, newXMaxI, newYMaxI, &xMax, &yMax); - selectedRegion->xMin = xMin < xMax ? xMin : xMax; - selectedRegion->xMax = xMin < xMax ? xMax : xMin; - selectedRegion->yMin = yMin < yMax ? yMin : yMax; - selectedRegion->yMax = yMin < yMax ? yMax : yMin; - - // setup for drawing - splashColorCopy(regionColor, paperColor); - splashColorXor(regionColor, selectedRegion->selectColor); - splashColorCopy(handleColor, paperColor); - - // erase old region on off-screen bitmap - xorRectangle(pg, xMinI - 3, yMinI - 3, xMinI + 3, yMinI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, xMinI - 3, yMaxI - 3, xMinI + 3, yMaxI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, xMaxI - 3, yMinI - 3, xMaxI + 3, yMinI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, xMaxI - 3, yMaxI - 3, xMaxI + 3, yMaxI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, (xMinI + xMaxI)/2 - 3, yMinI - 3, - (xMinI + xMaxI)/2 + 3, yMinI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, (xMinI + xMaxI)/2 - 3, yMaxI - 3, - (xMinI + xMaxI)/2 + 3, yMaxI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, xMinI - 3, (yMinI + yMaxI)/2 - 3, - xMinI + 3, (yMinI + yMaxI)/2 + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, xMaxI - 3, (yMinI + yMaxI)/2 - 3, - xMaxI + 3, (yMinI + yMaxI)/2 + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, xMinI, yMinI, xMaxI, yMaxI, - new SplashSolidColor(regionColor)); - - // draw new region on off-screen bitmap - xorRectangle(pg, newXMinI, newYMinI, newXMaxI, newYMaxI, - new SplashSolidColor(regionColor)); - xorRectangle(pg, newXMinI - 3, newYMinI - 3, newXMinI + 3, newYMinI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, newXMinI - 3, newYMaxI - 3, newXMinI + 3, newYMaxI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, newXMaxI - 3, newYMinI - 3, newXMaxI + 3, newYMinI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, newXMaxI - 3, newYMaxI - 3, newXMaxI + 3, newYMaxI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, (newXMinI + newXMaxI)/2 - 3, newYMinI - 3, - (newXMinI + newXMaxI)/2 + 3, newYMinI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, (newXMinI + newXMaxI)/2 - 3, newYMaxI - 3, - (newXMinI + newXMaxI)/2 + 3, newYMaxI + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, newXMinI - 3, (newYMinI + newYMaxI)/2 - 3, - newXMinI + 3, (newYMinI + newYMaxI)/2 + 3, - new SplashSolidColor(handleColor)); - xorRectangle(pg, newXMaxI - 3, (newYMinI + newYMaxI)/2 - 3, - newXMaxI + 3, (newYMinI + newYMaxI)/2 + 3, - new SplashSolidColor(handleColor)); - - // redraw - cvtDevToWindow(pg, (xMinI < newXMinI ? xMinI : newXMinI) - 3, - (yMinI < newYMinI ? yMinI : newYMinI) - 3, - &wxMin, &wyMin); - cvtDevToWindow(pg, (xMaxI > newXMaxI ? xMaxI : newXMaxI) + 3, - (yMaxI > newYMaxI ? yMaxI : newYMaxI) + 3, - &wxMax, &wyMax); - redrawWindow(wxMin, wyMin, wxMax - wxMin + 1, wyMax - wyMin + 1, gTrue); - - // scroll if necessary - if (needScroll) { - scrollTo(sx, sy); - } -} - -void PDFCore::xorHighlight(PDFRegion *region, int from, int to, - PDFCoreTile *tile) { - int xMinI, yMinI, xMaxI, yMaxI, t; - int wxMin, wyMin, wxMax, wyMax; - SplashColor regionColor, handleColor; - PDFCorePage *page; - - cvtUserToDev(region->page, region->xMin, region->yMin, &xMinI, &yMinI); - cvtUserToDev(region->page, region->xMax, region->yMax, &xMaxI, &yMaxI); - if (xMinI > xMaxI) { - t = xMinI; xMinI = xMaxI; xMaxI = t; - } - if (yMinI > yMaxI) { - t = yMinI; yMinI = yMaxI; yMaxI = t; - } - - switch (from) { - case highlightNone: - splashColorCopy(regionColor, paperColor); - break; - case highlightNormal: - splashColorCopy(regionColor, region->color); - break; - case highlightSelected: - splashColorCopy(regionColor, region->selectColor); - break; - } - switch (to) { - case highlightNone: - splashColorXor(regionColor, paperColor); - break; - case highlightNormal: - splashColorXor(regionColor, region->color); - break; - case highlightSelected: - splashColorXor(regionColor, region->selectColor); - break; - } - splashColorCopy(handleColor, paperColor); - - if (from == highlightSelected) { - xorRectangle(region->page, xMinI - 3, yMinI - 3, xMinI + 3, yMinI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMinI - 3, yMaxI - 3, xMinI + 3, yMaxI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMaxI - 3, yMinI - 3, xMaxI + 3, yMinI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMaxI - 3, yMaxI - 3, xMaxI + 3, yMaxI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, (xMinI + xMaxI)/2 - 3, yMinI - 3, - (xMinI + xMaxI)/2 + 3, yMinI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, (xMinI + xMaxI)/2 - 3, yMaxI - 3, - (xMinI + xMaxI)/2 + 3, yMaxI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMinI - 3, (yMinI + yMaxI)/2 - 3, - xMinI + 3, (yMinI + yMaxI)/2 + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMaxI - 3, (yMinI + yMaxI)/2 - 3, - xMaxI + 3, (yMinI + yMaxI)/2 + 3, - new SplashSolidColor(handleColor), tile); - } - - xorRectangle(region->page, xMinI, yMinI, xMaxI, yMaxI, - new SplashSolidColor(regionColor), tile); - - if (to == highlightSelected) { - xorRectangle(region->page, xMinI - 3, yMinI - 3, xMinI + 3, yMinI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMinI - 3, yMaxI - 3, xMinI + 3, yMaxI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMaxI - 3, yMinI - 3, xMaxI + 3, yMinI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMaxI - 3, yMaxI - 3, xMaxI + 3, yMaxI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, (xMinI + xMaxI)/2 - 3, yMinI - 3, - (xMinI + xMaxI)/2 + 3, yMinI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, (xMinI + xMaxI)/2 - 3, yMaxI - 3, - (xMinI + xMaxI)/2 + 3, yMaxI + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMinI - 3, (yMinI + yMaxI)/2 - 3, - xMinI + 3, (yMinI + yMaxI)/2 + 3, - new SplashSolidColor(handleColor), tile); - xorRectangle(region->page, xMaxI - 3, (yMinI + yMaxI)/2 - 3, - xMaxI + 3, (yMinI + yMaxI)/2 + 3, - new SplashSolidColor(handleColor), tile); - } - - if ((page = findPage(region->page))) { - if ((xMinI -= 3) < 0) { - xMinI = 0; - } - if ((yMinI -= 3) < 0) { - yMinI = 0; - } - if ((xMaxI += 3) >= page->w) { - xMaxI = page->w - 1; - } - if ((yMaxI += 3) >= page->h) { - yMaxI = page->h - 1; - } - cvtDevToWindow(region->page, xMinI, yMinI, &wxMin, &wyMin); - cvtDevToWindow(region->page, xMaxI, yMaxI, &wxMax, &wyMax); - redrawWindow(wxMin, wyMin, wxMax - wxMin + 1, wyMax - wyMin + 1, gFalse); - } -} - -#endif // HIGHLIGHTED_REGIONS - -GBool PDFCore::cvtWindowToUser(int xw, int yw, - int *pg, double *xu, double *yu) { - PDFCorePage *page; - PDFCoreTile *tile; - int i; - - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - if (xw >= page->xDest && xw < page->xDest + page->w && - yw >= page->yDest && yw < page->yDest + page->h) { - if (page->tiles->getLength() == 0) { - break; - } - tile = (PDFCoreTile *)page->tiles->get(0); - *pg = page->page; - xw -= tile->xDest; - yw -= tile->yDest; - *xu = tile->ictm[0] * xw + tile->ictm[2] * yw + tile->ictm[4]; - *yu = tile->ictm[1] * xw + tile->ictm[3] * yw + tile->ictm[5]; - return gTrue; - } - } - *pg = 0; - *xu = *yu = 0; - return gFalse; -} - -GBool PDFCore::cvtWindowToDev(int xw, int yw, int *pg, int *xd, int *yd) { - PDFCorePage *page; - int i; - - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - if (xw >= page->xDest && xw < page->xDest + page->w && - yw >= page->yDest && yw < page->yDest + page->h) { - *pg = page->page; - *xd = xw - page->xDest; - *yd = yw - page->yDest; - return gTrue; - } - } - *pg = 0; - *xd = *yd = 0; - return gFalse; -} - -void PDFCore::cvtUserToWindow(int pg, double xu, double yu, int *xw, int *yw) { - PDFCorePage *page; - PDFCoreTile *tile; - - if ((page = findPage(pg)) && - page->tiles->getLength() > 0) { - tile = (PDFCoreTile *)page->tiles->get(0); - } else if (curTile && curPage->page == pg) { - tile = curTile; - } else { - tile = NULL; - } - if (tile) { - *xw = tile->xDest + (int)(tile->ctm[0] * xu + tile->ctm[2] * yu + - tile->ctm[4] + 0.5); - *yw = tile->yDest + (int)(tile->ctm[1] * xu + tile->ctm[3] * yu + - tile->ctm[5] + 0.5); - } else { - // this should never happen - *xw = *yw = 0; - } -} - -void PDFCore::cvtUserToDev(int pg, double xu, double yu, int *xd, int *yd) { - PDFCorePage *page; - PDFCoreTile *tile; - double ctm[6]; - - if ((page = findPage(pg)) && - page->tiles->getLength() > 0) { - tile = (PDFCoreTile *)page->tiles->get(0); - } else if (curTile && curPage->page == pg) { - tile = curTile; - } else { - tile = NULL; - } - if (tile) { - *xd = (int)(tile->xMin + tile->ctm[0] * xu + - tile->ctm[2] * yu + tile->ctm[4] + 0.5); - *yd = (int)(tile->yMin + tile->ctm[1] * xu + - tile->ctm[3] * yu + tile->ctm[5] + 0.5); - } else { - doc->getCatalog()->getPage(pg)->getDefaultCTM(ctm, dpi, dpi, rotate, - gFalse, out->upsideDown()); - *xd = (int)(ctm[0] * xu + ctm[2] * yu + ctm[4] + 0.5); - *yd = (int)(ctm[1] * xu + ctm[3] * yu + ctm[5] + 0.5); - } -} - -void PDFCore::cvtDevToWindow(int pg, int xd, int yd, int *xw, int *yw) { - PDFCorePage *page; - - if ((page = findPage(pg))) { - *xw = page->xDest + xd; - *yw = page->yDest + yd; - } else { - // this should never happen - *xw = *yw = 0; - } -} - -void PDFCore::cvtDevToUser(int pg, int xd, int yd, double *xu, double *yu) { - PDFCorePage *page; - PDFCoreTile *tile; - - if ((page = findPage(pg)) && - page->tiles->getLength() > 0) { - tile = (PDFCoreTile *)page->tiles->get(0); - } else if (curTile && curPage->page == pg) { - tile = curTile; - } else { - tile = NULL; - } - if (tile) { - xd -= tile->xMin; - yd -= tile->yMin; - *xu = tile->ictm[0] * xd + tile->ictm[2] * yd + tile->ictm[4]; - *yu = tile->ictm[1] * xd + tile->ictm[3] * yd + tile->ictm[5]; - } else { - // this should never happen - *xu = *yu = 0; - } -} - -void PDFCore::setReverseVideo(GBool reverseVideoA) { - out->setReverseVideo(reverseVideoA); - update(topPage, scrollX, scrollY, zoom, rotate, gTrue, gFalse, gFalse); -} - -LinkAction *PDFCore::findLink(int pg, double x, double y) { - PDFCorePage *page; - - if ((page = findPage(pg))) { - return page->links ? page->links->find(x, y) : (LinkAction *)NULL; - } - return NULL; -} - -PDFCorePage *PDFCore::findPage(int pg) { - PDFCorePage *page; - int i; - - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - if (page->page == pg) { - return page; - } - } - return NULL; -} - -void PDFCore::redrawCbk(void *data, int x0, int y0, int x1, int y1, - GBool composited) { - PDFCore *core = (PDFCore *)data; - - core->curTile->bitmap = core->out->getBitmap(); - - // the default CTM is set by the Gfx constructor; tile->ctm is - // needed by the coordinate conversion functions (which may be - // called during redraw) - memcpy(core->curTile->ctm, core->out->getDefCTM(), 6 * sizeof(double)); - memcpy(core->curTile->ictm, core->out->getDefICTM(), 6 * sizeof(double)); - - // the bitmap created by Gfx and SplashOutputDev can be a slightly - // different size due to rounding errors - if (x1 >= core->curTile->xMax - core->curTile->xMin) { - x1 = core->curTile->xMax - core->curTile->xMin - 1; - } - if (y1 >= core->curTile->yMax - core->curTile->yMin) { - y1 = core->curTile->yMax - core->curTile->yMin - 1; - } - - core->clippedRedrawRect(core->curTile, x0, y0, - core->curTile->xDest + x0, core->curTile->yDest + y0, - x1 - x0 + 1, y1 - y0 + 1, - 0, 0, core->drawAreaWidth, core->drawAreaHeight, - gTrue, composited); -} - -void PDFCore::redrawWindow(int x, int y, int width, int height, - GBool needUpdate) { - PDFCorePage *page; - PDFCoreTile *tile; - int xDest, yDest, w, i, j; - - if (pages->getLength() == 0) { - redrawRect(NULL, 0, 0, x, y, width, height, gTrue); - return; - } - - for (i = 0; i < pages->getLength(); ++i) { - page = (PDFCorePage *)pages->get(i); - for (j = 0; j < page->tiles->getLength(); ++j) { - tile = (PDFCoreTile *)page->tiles->get(j); - if (tile->edges & pdfCoreTileTopEdge) { - if (tile->edges & pdfCoreTileLeftEdge) { - xDest = 0; - } else { - xDest = tile->xDest; - } - if (tile->edges & pdfCoreTileRightEdge) { - w = drawAreaWidth - xDest; - } else { - w = tile->xDest + (tile->xMax - tile->xMin) - xDest; - } - clippedRedrawRect(NULL, 0, 0, - xDest, 0, w, tile->yDest, - x, y, width, height, gFalse); - } - if (tile->edges & pdfCoreTileBottomEdge) { - if (tile->edges & pdfCoreTileLeftEdge) { - xDest = 0; - } else { - xDest = tile->xDest; - } - if (tile->edges & pdfCoreTileRightEdge) { - w = drawAreaWidth - xDest; - } else { - w = tile->xDest + (tile->xMax - tile->xMin) - xDest; - } - yDest = tile->yDest + (tile->yMax - tile->yMin); - clippedRedrawRect(NULL, 0, 0, - xDest, yDest, w, drawAreaHeight - yDest, - x, y, width, height, gFalse); - } else if ((tile->edges & pdfCoreTileBottomSpace) && - i+1 < pages->getLength()) { - if (tile->edges & pdfCoreTileLeftEdge) { - xDest = 0; - } else { - xDest = tile->xDest; - } - if (tile->edges & pdfCoreTileRightEdge) { - w = drawAreaWidth - xDest; - } else { - w = tile->xDest + (tile->xMax - tile->xMin) - xDest; - } - yDest = tile->yDest + (tile->yMax - tile->yMin); - clippedRedrawRect(NULL, 0, 0, - xDest, yDest, - w, ((PDFCorePage *)pages->get(i+1))->yDest - yDest, - x, y, width, height, gFalse); - } - if (tile->edges & pdfCoreTileLeftEdge) { - clippedRedrawRect(NULL, 0, 0, - 0, tile->yDest, - tile->xDest, tile->yMax - tile->yMin, - x, y, width, height, gFalse); - } - if (tile->edges & pdfCoreTileRightEdge) { - xDest = tile->xDest + (tile->xMax - tile->xMin); - clippedRedrawRect(NULL, 0, 0, - xDest, tile->yDest, - drawAreaWidth - xDest, tile->yMax - tile->yMin, - x, y, width, height, gFalse); - } - clippedRedrawRect(tile, 0, 0, tile->xDest, tile->yDest, - tile->bitmap->getWidth(), tile->bitmap->getHeight(), - x, y, width, height, needUpdate); - } - } -} - -PDFCoreTile *PDFCore::newTile(int xDestA, int yDestA) { - return new PDFCoreTile(xDestA, yDestA); -} - -void PDFCore::updateTileData(PDFCoreTile *tileA, int xSrc, int ySrc, - int width, int height, GBool composited) { -} - -void PDFCore::clippedRedrawRect(PDFCoreTile *tile, int xSrc, int ySrc, - int xDest, int yDest, int width, int height, - int xClip, int yClip, int wClip, int hClip, - GBool needUpdate, GBool composited) { - if (tile && needUpdate) { - updateTileData(tile, xSrc, ySrc, width, height, composited); - } - if (xDest < xClip) { - xSrc += xClip - xDest; - width -= xClip - xDest; - xDest = xClip; - } - if (xDest + width > xClip + wClip) { - width = xClip + wClip - xDest; - } - if (yDest < yClip) { - ySrc += yClip - yDest; - height -= yClip - yDest; - yDest = yClip; - } - if (yDest + height > yClip + hClip) { - height = yClip + hClip - yDest; - } - if (width > 0 && height > 0) { - redrawRect(tile, xSrc, ySrc, xDest, yDest, width, height, composited); - } -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/PDFCore.h b/thirdparty/xpdf/3.02/src/xpdf/PDFCore.h deleted file mode 100644 index 98e48e9d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PDFCore.h +++ /dev/null @@ -1,388 +0,0 @@ -//======================================================================== -// -// PDFCore.h -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PDFCORE_H -#define PDFCORE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "SplashTypes.h" -#include "CharTypes.h" - -class GString; -class GList; -class SplashBitmap; -class SplashPattern; -class BaseStream; -class PDFDoc; -class Links; -class LinkDest; -class LinkAction; -class TextPage; -class HighlightFile; -class CoreOutputDev; -class PDFCore; - -//------------------------------------------------------------------------ -// zoom factor -//------------------------------------------------------------------------ - -#define zoomPage -1 -#define zoomWidth -2 -#define defZoom 125 - -//------------------------------------------------------------------------ - -#ifdef HIGHLIGHTED_REGIONS -#define highlightNone 0 -#define highlightNormal 1 -#define highlightSelected 2 -#endif - -//------------------------------------------------------------------------ - -// Number of pixels of matte color between pages in continuous mode. -#define continuousModePageSpacing 3 - -//------------------------------------------------------------------------ -// PDFCorePage -//------------------------------------------------------------------------ - -class PDFCorePage { -public: - - PDFCorePage(int pageA, int wA, int hA, int tileWA, int tileHA); - ~PDFCorePage(); - - int page; - GList *tiles; // cached tiles [PDFCoreTile] - int xDest, yDest; // position of upper-left corner - // in the drawing area - int w, h; // size of whole page bitmap - int tileW, tileH; // size of tiles - Links *links; // hyperlinks for this page - TextPage *text; // extracted text -#ifdef HIGHLIGHTED_REGIONS - GList *regions; // regions on the this page [PDFRegion] -#endif -}; - -//------------------------------------------------------------------------ -// PDFCoreTile -//------------------------------------------------------------------------ - -class PDFCoreTile { -public: - - PDFCoreTile(int xDestA, int yDestA); - virtual ~PDFCoreTile(); - - int xMin, yMin, xMax, yMax; - int xDest, yDest; - Guint edges; - SplashBitmap *bitmap; - double ctm[6]; // coordinate transform matrix: - // default user space -> device space - double ictm[6]; // inverse CTM -}; - -#define pdfCoreTileTopEdge 0x01 -#define pdfCoreTileBottomEdge 0x02 -#define pdfCoreTileLeftEdge 0x04 -#define pdfCoreTileRightEdge 0x08 -#define pdfCoreTileTopSpace 0x10 -#define pdfCoreTileBottomSpace 0x20 - -//------------------------------------------------------------------------ -// PDFHistory -//------------------------------------------------------------------------ - -struct PDFHistory { - GString *fileName; - int page; -}; - -#define pdfHistorySize 50 - -#ifdef HIGHLIGHTED_REGIONS -//------------------------------------------------------------------------ -// PDFRegion -//------------------------------------------------------------------------ - -class PDFRegion { -public: - - PDFRegion(); - ~PDFRegion(); - - int page; - double xMin, yMin, xMax, yMax; - SplashColor color; - SplashColor selectColor; - GBool selectable; - GString *label; -}; -#endif // HIGHLIGHTED_REGIONS - -//------------------------------------------------------------------------ -// PDFCore -//------------------------------------------------------------------------ - -class PDFCore { -public: - - PDFCore(SplashColorMode colorModeA, int bitmapRowPadA, - GBool reverseVideoA, SplashColorPtr paperColorA, - GBool incrementalUpdate); - virtual ~PDFCore(); - - //----- loadFile / displayPage / displayDest - - // Load a new file. Returns pdfOk or error code. - virtual int loadFile(GString *fileName, GString *ownerPassword = NULL, - GString *userPassword = NULL); - -#ifdef WIN32 - // Load a new file. Returns pdfOk or error code. - virtual int loadFile(wchar_t *fileName, int fileNameLen, - GString *ownerPassword = NULL, - GString *userPassword = NULL); -#endif - - // Load a new file, via a Stream instead of a file name. Returns - // pdfOk or error code. - virtual int loadFile(BaseStream *stream, GString *ownerPassword = NULL, - GString *userPassword = NULL); - - // Load an already-created PDFDoc object. - virtual void loadDoc(PDFDoc *docA); - - // Clear out the current document, if any. - virtual void clear(); - - // Same as clear(), but returns the PDFDoc object instead of - // deleting it. - virtual PDFDoc *takeDoc(GBool redraw); - - // Display (or redisplay) the specified page. If is - // set, the window is vertically scrolled to the top; otherwise, no - // scrolling is done. If is set, this page change is - // added to the history list. - virtual void displayPage(int topPageA, double zoomA, int rotateA, - GBool scrollToTop, GBool addToHist); - - // Display a link destination. - virtual void displayDest(LinkDest *dest, double zoomA, int rotateA, - GBool addToHist); - - // Update the display, given the specified parameters. - virtual void update(int topPageA, int scrollXA, int scrollYA, - double zoomA, int rotateA, GBool force, - GBool addToHist, GBool adjustScrollX); - - //----- page/position changes - - virtual GBool gotoNextPage(int inc, GBool top); - virtual GBool gotoPrevPage(int dec, GBool top, GBool bottom); - virtual GBool gotoNamedDestination(GString *dest); - virtual GBool goForward(); - virtual GBool goBackward(); - virtual void scrollLeft(int nCols = 16); - virtual void scrollRight(int nCols = 16); - virtual void scrollUp(int nLines = 16); - virtual void scrollUpPrevPage(int nLines = 16); - virtual void scrollDown(int nLines = 16); - virtual void scrollDownNextPage(int nLines = 16); - virtual void scrollPageUp(); - virtual void scrollPageDown(); - virtual void scrollTo(int x, int y); - virtual void scrollToLeftEdge(); - virtual void scrollToRightEdge(); - virtual void scrollToTopEdge(); - virtual void scrollToBottomEdge(); - virtual void scrollToTopLeft(); - virtual void scrollToBottomRight(); - virtual void zoomToRect(int pg, double ulx, double uly, - double lrx, double lry); - virtual void zoomCentered(double zoomA); - virtual void zoomToCurrentWidth(); - virtual void setContinuousMode(GBool cm); - - //----- selection - - // Current selected region. - void setSelection(int newSelectPage, - int newSelectULX, int newSelectULY, - int newSelectLRX, int newSelectLRY); - void moveSelection(int pg, int x, int y); - GBool getSelection(int *pg, double *ulx, double *uly, - double *lrx, double *lry); - - // Text extraction. - GString *extractText(int pg, double xMin, double yMin, - double xMax, double yMax); - - //----- find - - virtual GBool find(char *s, GBool caseSensitive, GBool next, GBool backward, - GBool onePageOnly); - virtual GBool findU(Unicode *u, int len, GBool caseSensitive, - GBool next, GBool backward, GBool onePageOnly); - -#ifdef HIGHLIGHTED_REGIONS - //----- highlighted regions - - PDFRegion *addRegion(int pg, double xMin, double yMin, - double xMax, double yMax, - SplashColor color, SplashColorPtr selectColor, - GBool selectable, char *label); - void deleteRegion(PDFRegion *region); - void deleteAllRegions(); - int getNumRegions(); - PDFRegion *getRegion(int idx); - PDFRegion *getSelectedRegion() { return selectedRegion; } - void setSelectedRegion(PDFRegion *region); - void makeRegionVisible(PDFRegion *region); - int loadHighlightFile(char *fileName, SplashColorPtr color, - SplashColorPtr selectColor, GBool selectable); - int loadHighlightFile(int (*getChar)(void *stream), void *stream, - SplashColorPtr color, - SplashColorPtr selectColor, GBool selectable); -#endif // HIGHLIGHTED_REGIONS - - //----- coordinate conversion - - // user space: per-pace, as defined by PDF file; unit = point - // device space: (0,0) is upper-left corner of a page; unit = pixel - // window space: (0,0) is upper-left corner of drawing area; unit = pixel - - GBool cvtWindowToUser(int xw, int yw, int *pg, double *xu, double *yu); - GBool cvtWindowToDev(int xw, int yw, int *pg, int *xd, int *yd); - void cvtUserToWindow(int pg, double xy, double yu, int *xw, int *yw); - void cvtUserToDev(int pg, double xu, double yu, int *xd, int *yd); - void cvtDevToWindow(int pg, int xd, int yd, int *xw, int *yw); - void cvtDevToUser(int pg, int xd, int yd, double *xu, double *yu); - - //----- password dialog - - virtual GString *getPassword() { return NULL; } - - //----- misc access - - PDFDoc *getDoc() { return doc; } - int getPageNum() { return topPage; } - double getZoom() { return zoom; } - double getZoomDPI() { return dpi; } - int getRotate() { return rotate; } - GBool getContinuousMode() { return continuousMode; } - virtual void setReverseVideo(GBool reverseVideoA); - GBool canGoBack() { return historyBLen > 1; } - GBool canGoForward() { return historyFLen > 0; } - int getScrollX() { return scrollX; } - int getScrollY() { return scrollY; } - int getDrawAreaWidth() { return drawAreaWidth; } - int getDrawAreaHeight() { return drawAreaHeight; } - virtual void setBusyCursor(GBool busy) = 0; - LinkAction *findLink(int pg, double x, double y); - -protected: - - int loadFile2(PDFDoc *newDoc); - void addPage(int pg, int rot); - void needTile(PDFCorePage *page, int x, int y); - void xorRectangle(int pg, int x0, int y0, int x1, int y1, - SplashPattern *pattern, PDFCoreTile *oneTile = NULL); - int loadHighlightFile(HighlightFile *hf, SplashColorPtr color, - SplashColorPtr selectColor, GBool selectable); -#ifdef HIGHLIGHTED_REGIONS - GBool findSelectedRegion(int pg, int x, int y); - void resizeRegion(int pg, int x, int y); - void xorHighlight(PDFRegion *region, int from, int to, - PDFCoreTile *tile = NULL); -#endif - PDFCorePage *findPage(int pg); - static void redrawCbk(void *data, int x0, int y0, int x1, int y1, - GBool composited); - void redrawWindow(int x, int y, int width, int height, - GBool needUpdate); - virtual PDFCoreTile *newTile(int xDestA, int yDestA); - virtual void updateTileData(PDFCoreTile *tileA, int xSrc, int ySrc, - int width, int height, GBool composited); - virtual void redrawRect(PDFCoreTile *tileA, int xSrc, int ySrc, - int xDest, int yDest, int width, int height, - GBool composited) = 0; - void clippedRedrawRect(PDFCoreTile *tile, int xSrc, int ySrc, - int xDest, int yDest, int width, int height, - int xClip, int yClip, int wClip, int hClip, - GBool needUpdate, GBool composited = gTrue); - virtual void updateScrollbars() = 0; - virtual GBool checkForNewFile() { return gFalse; } - - PDFDoc *doc; // current PDF file - GBool continuousMode; // false for single-page mode, true for - // continuous mode - int drawAreaWidth, // size of the PDF display area - drawAreaHeight; - double maxUnscaledPageW, // maximum unscaled page size - maxUnscaledPageH; - int maxPageW; // maximum page width (only used in - // continuous mode) - int totalDocH; // total document height (only used in - // continuous mode) - int *pageY; // top coordinates for each page (only used - // in continuous mode) - int topPage; // page at top of window - int midPage; // page at middle of window - int scrollX, scrollY; // offset from top left corner of topPage - // to top left corner of window - double zoom; // current zoom level, in percent of 72 dpi - double dpi; // current zoom level, in DPI - int rotate; // current page rotation - - int selectPage; // page number of current selection - int selectULX, // coordinates of current selection, - selectULY, // in device space -- (ULX==LRX || ULY==LRY) - selectLRX, // means there is no selection - selectLRY; - GBool dragging; // set while selection is being dragged - GBool lastDragLeft; // last dragged selection edge was left/right - GBool lastDragTop; // last dragged selection edge was top/bottom - - PDFHistory // page history queue - history[pdfHistorySize]; - int historyCur; // currently displayed page - int historyBLen; // number of valid entries backward from - // current entry - int historyFLen; // number of valid entries forward from - // current entry - -#ifdef HIGHLIGHTED_REGIONS - GList *regions; // list of highlighted regions [PDFRegion] - PDFRegion *selectedRegion; // currently selected region - int regionResizeX; // +1/-1/0 = resizing region's right side / - // left side / neither - int regionResizeY; // +1/-1/0 = resizing region's bottom side / - // top side / neither -#endif - - GList *pages; // cached pages [PDFCorePage] - PDFCoreTile *curTile; // tile currently being rasterized - PDFCorePage *curPage; // page to which curTile belongs - - SplashColor paperColor; - CoreOutputDev *out; - - friend class PDFCoreTile; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/PDFDoc.cc b/thirdparty/xpdf/3.02/src/xpdf/PDFDoc.cc deleted file mode 100644 index 6dd512dc..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PDFDoc.cc +++ /dev/null @@ -1,506 +0,0 @@ -//======================================================================== -// -// PDFDoc.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#ifdef WIN32 -# include -#endif -#include "GString.h" -#include "config.h" -#include "GlobalParams.h" -#include "Page.h" -#include "Catalog.h" -#include "Stream.h" -#include "XRef.h" -#include "Link.h" -#include "OutputDev.h" -#include "Error.h" -#include "ErrorCodes.h" -#include "Lexer.h" -#include "Parser.h" -#include "SecurityHandler.h" -#ifndef DISABLE_OUTLINE -#include "Outline.h" -#endif -#include "OptionalContent.h" -#include "PDFDoc.h" - -//------------------------------------------------------------------------ - -#define headerSearchSize 1024 // read this many bytes at beginning of - // file to look for '%PDF' - -//------------------------------------------------------------------------ -// PDFDoc -//------------------------------------------------------------------------ - -PDFDoc::PDFDoc(GString *fileNameA, GString *ownerPassword, - GString *userPassword, PDFCore *coreA) { - Object obj; - GString *fileName1, *fileName2; -#ifdef WIN32 - int n, i; -#endif - - ok = gFalse; - errCode = errNone; - - core = coreA; - - file = NULL; - str = NULL; - xref = NULL; - catalog = NULL; -#ifndef DISABLE_OUTLINE - outline = NULL; -#endif - optContent = NULL; - - fileName = fileNameA; -#ifdef WIN32 - n = fileName->getLength(); - fileNameU = (wchar_t *)gmallocn(n + 1, sizeof(wchar_t)); - for (i = 0; i < n; ++i) { - fileNameU[i] = (wchar_t)(fileName->getChar(i) & 0xff); - } - fileNameU[n] = L'\0'; -#endif - - fileName1 = fileName; - - - // try to open file - fileName2 = NULL; -#ifdef VMS - if (!(file = fopen(fileName1->getCString(), "rb", "ctx=stm"))) { - error(errIO, -1, "Couldn't open file '{0:t}'", fileName1); - errCode = errOpenFile; - return; - } -#else - if (!(file = fopen(fileName1->getCString(), "rb"))) { - fileName2 = fileName->copy(); - fileName2->lowerCase(); - if (!(file = fopen(fileName2->getCString(), "rb"))) { - fileName2->upperCase(); - if (!(file = fopen(fileName2->getCString(), "rb"))) { - error(errIO, -1, "Couldn't open file '{0:t}'", fileName); - delete fileName2; - errCode = errOpenFile; - return; - } - } - delete fileName2; - } -#endif - - // create stream - obj.initNull(); - str = new FileStream(file, 0, gFalse, 0, &obj); - - ok = setup(ownerPassword, userPassword); -} - -#ifdef WIN32 -PDFDoc::PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword, - GString *userPassword, PDFCore *coreA) { - OSVERSIONINFO version; - Object obj; - int i; - - ok = gFalse; - errCode = errNone; - - core = coreA; - - file = NULL; - str = NULL; - xref = NULL; - catalog = NULL; -#ifndef DISABLE_OUTLINE - outline = NULL; -#endif - optContent = NULL; - - // save both Unicode and 8-bit copies of the file name - fileName = new GString(); - fileNameU = (wchar_t *)gmallocn(fileNameLen + 1, sizeof(wchar_t)); - for (i = 0; i < fileNameLen; ++i) { - fileName->append((char)fileNameA[i]); - fileNameU[i] = fileNameA[i]; - } - fileNameU[fileNameLen] = L'\0'; - - // try to open file - // NB: _wfopen is only available in NT - version.dwOSVersionInfoSize = sizeof(version); - GetVersionEx(&version); - if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - file = _wfopen(fileNameU, L"rb"); - } else { - file = fopen(fileName->getCString(), "rb"); - } - if (!file) { - error(errIO, -1, "Couldn't open file '{0:t}'", fileName); - errCode = errOpenFile; - return; - } - - // create stream - obj.initNull(); - str = new FileStream(file, 0, gFalse, 0, &obj); - - ok = setup(ownerPassword, userPassword); -} -#endif - -PDFDoc::PDFDoc(BaseStream *strA, GString *ownerPassword, - GString *userPassword, PDFCore *coreA) { -#ifdef WIN32 - int n, i; -#endif - - ok = gFalse; - errCode = errNone; - core = coreA; - if (strA->getFileName()) { - fileName = strA->getFileName()->copy(); -#ifdef WIN32 - n = fileName->getLength(); - fileNameU = (wchar_t *)gmallocn(n + 1, sizeof(wchar_t)); - for (i = 0; i < n; ++i) { - fileNameU[i] = (wchar_t)(fileName->getChar(i) & 0xff); - } - fileNameU[n] = L'\0'; -#endif - } else { - fileName = NULL; -#ifdef WIN32 - fileNameU = NULL; -#endif - } - file = NULL; - str = strA; - xref = NULL; - catalog = NULL; -#ifndef DISABLE_OUTLINE - outline = NULL; -#endif - optContent = NULL; - ok = setup(ownerPassword, userPassword); -} - -GBool PDFDoc::setup(GString *ownerPassword, GString *userPassword) { - str->reset(); - - // check header - checkHeader(); - - // read xref table - xref = new XRef(str); - if (!xref->isOk()) { - error(errSyntaxError, -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(this); - if (!catalog->isOk()) { - error(errSyntaxError, -1, "Couldn't read page catalog"); - errCode = errBadCatalog; - return gFalse; - } - -#ifndef DISABLE_OUTLINE - // read outline - outline = new Outline(catalog->getOutline(), xref); -#endif - - // read the optional content info - optContent = new OptionalContent(this); - - // done - return gTrue; -} - -PDFDoc::~PDFDoc() { - if (optContent) { - delete optContent; - } -#ifndef DISABLE_OUTLINE - if (outline) { - delete outline; - } -#endif - if (catalog) { - delete catalog; - } - if (xref) { - delete xref; - } - if (str) { - delete str; - } - if (file) { - fclose(file); - } - if (fileName) { - delete fileName; - } -#ifdef WIN32 - if (fileNameU) { - gfree(fileNameU); - } -#endif -} - -// Check for a PDF header on this stream. Skip past some garbage -// if necessary. -void PDFDoc::checkHeader() { - char hdrBuf[headerSearchSize+1]; - char *p; - int i; - - pdfVersion = 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(errSyntaxWarning, -1, "May not be a PDF file (continuing anyway)"); - return; - } - str->moveStart(i); - if (!(p = strtok(&hdrBuf[i+5], " \t\n\r"))) { - error(errSyntaxWarning, -1, "May not be a PDF file (continuing anyway)"); - return; - } - pdfVersion = atof(p); - if (!(hdrBuf[i+5] >= '0' && hdrBuf[i+5] <= '9') || - pdfVersion > supportedPDFVersionNum + 0.0001) { - error(errSyntaxWarning, -1, - "PDF version {0:s} -- xpdf supports version {1:s} (continuing anyway)", - p, supportedPDFVersionStr); - } -} - -GBool PDFDoc::checkEncryption(GString *ownerPassword, GString *userPassword) { - Object encrypt; - GBool encrypted; - SecurityHandler *secHdlr; - GBool ret; - - xref->getTrailerDict()->dictLookup("Encrypt", &encrypt); - if ((encrypted = encrypt.isDict())) { - if ((secHdlr = SecurityHandler::make(this, &encrypt))) { - if (secHdlr->isUnencrypted()) { - // no encryption - ret = gTrue; - } else if (secHdlr->checkEncryption(ownerPassword, userPassword)) { - // authorization succeeded - xref->setEncryption(secHdlr->getPermissionFlags(), - secHdlr->getOwnerPasswordOk(), - secHdlr->getFileKey(), - secHdlr->getFileKeyLength(), - secHdlr->getEncVersion(), - secHdlr->getEncAlgorithm()); - ret = gTrue; - } else { - // authorization failed - ret = gFalse; - } - delete secHdlr; - } 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) { - if (globalParams->getPrintCommands()) { - printf("***** page %d *****\n", page); - } - catalog->getPage(page)->display(out, hDPI, vDPI, - rotate, useMediaBox, crop, printing, - abortCheckCbk, abortCheckCbkData); -} - -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) { - int page; - - for (page = firstPage; page <= lastPage; ++page) { - displayPage(out, page, hDPI, vDPI, rotate, useMediaBox, crop, printing, - abortCheckCbk, abortCheckCbkData); - } -} - -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) { - catalog->getPage(page)->displaySlice(out, hDPI, vDPI, - rotate, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, - abortCheckCbk, abortCheckCbkData); -} - -Links *PDFDoc::getLinks(int page) { - return catalog->getPage(page)->getLinks(); -} - -void PDFDoc::processLinks(OutputDev *out, int page) { - catalog->getPage(page)->processLinks(out); -} - -GBool PDFDoc::isLinearized() { - Parser *parser; - Object obj1, obj2, obj3, obj4, obj5; - GBool lin; - - lin = gFalse; - obj1.initNull(); - parser = new Parser(xref, - new Lexer(xref, - str->makeSubStream(str->getStart(), gFalse, 0, &obj1)), - gTrue); - parser->getObj(&obj1); - parser->getObj(&obj2); - parser->getObj(&obj3); - parser->getObj(&obj4); - if (obj1.isInt() && obj2.isInt() && obj3.isCmd("obj") && - obj4.isDict()) { - obj4.dictLookup("Linearized", &obj5); - if (obj5.isNum() && obj5.getNum() > 0) { - lin = gTrue; - } - obj5.free(); - } - obj4.free(); - obj3.free(); - obj2.free(); - obj1.free(); - delete parser; - return lin; -} - -GBool PDFDoc::saveAs(GString *name) { - FILE *f; - int c; - - if (!(f = fopen(name->getCString(), "wb"))) { - error(errIO, -1, "Couldn't open file '{0:t}'", name); - return gFalse; - } - str->reset(); - while ((c = str->getChar()) != EOF) { - fputc(c, f); - } - str->close(); - fclose(f); - return gTrue; -} - -GBool PDFDoc::saveEmbeddedFile(int idx, char *path) { - FILE *f; - GBool ret; - - if (!(f = fopen(path, "wb"))) { - return gFalse; - } - ret = saveEmbeddedFile2(idx, f); - fclose(f); - return ret; -} - -#ifdef WIN32 -GBool PDFDoc::saveEmbeddedFile(int idx, wchar_t *path, int pathLen) { - FILE *f; - OSVERSIONINFO version; - wchar_t path2w[_MAX_PATH + 1]; - char path2c[_MAX_PATH + 1]; - int i; - GBool ret; - - // NB: _wfopen is only available in NT - version.dwOSVersionInfoSize = sizeof(version); - GetVersionEx(&version); - if (version.dwPlatformId == VER_PLATFORM_WIN32_NT) { - for (i = 0; i < pathLen && i < _MAX_PATH; ++i) { - path2w[i] = path[i]; - } - path2w[i] = 0; - f = _wfopen(path2w, L"wb"); - } else { - for (i = 0; i < pathLen && i < _MAX_PATH; ++i) { - path2c[i] = (char)path[i]; - } - path2c[i] = 0; - f = fopen(path2c, "wb"); - } - if (!f) { - return gFalse; - } - ret = saveEmbeddedFile2(idx, f); - fclose(f); - return ret; -} -#endif - -GBool PDFDoc::saveEmbeddedFile2(int idx, FILE *f) { - Object strObj; - int c; - - if (!catalog->getEmbeddedFileStreamObj(idx, &strObj)) { - return gFalse; - } - strObj.streamReset(); - while ((c = strObj.streamGetChar()) != EOF) { - fputc(c, f); - } - strObj.streamClose(); - strObj.free(); - return gTrue; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/PDFDoc.h b/thirdparty/xpdf/3.02/src/xpdf/PDFDoc.h deleted file mode 100644 index e51aa2d7..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PDFDoc.h +++ /dev/null @@ -1,207 +0,0 @@ -//======================================================================== -// -// PDFDoc.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PDFDOC_H -#define PDFDOC_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "XRef.h" -#include "Catalog.h" -#include "Page.h" - -class GString; -class BaseStream; -class OutputDev; -class Links; -class LinkAction; -class LinkDest; -class Outline; -class OptionalContent; -class PDFCore; - -//------------------------------------------------------------------------ -// PDFDoc -//------------------------------------------------------------------------ - -class PDFDoc { -public: - - PDFDoc(GString *fileNameA, GString *ownerPassword = NULL, - GString *userPassword = NULL, PDFCore *coreA = NULL); -#ifdef WIN32 - PDFDoc(wchar_t *fileNameA, int fileNameLen, GString *ownerPassword = NULL, - GString *userPassword = NULL, PDFCore *coreA = NULL); -#endif - PDFDoc(BaseStream *strA, GString *ownerPassword = NULL, - GString *userPassword = NULL, PDFCore *coreA = NULL); - ~PDFDoc(); - - // Was PDF document successfully opened? - GBool isOk() { return ok; } - - // Get the error code (if isOk() returns false). - int getErrorCode() { return errCode; } - - // Get file name. - GString *getFileName() { return fileName; } -#ifdef WIN32 - wchar_t *getFileNameU() { return fileNameU; } -#endif - - // Get the xref table. - XRef *getXRef() { return xref; } - - // Get catalog. - Catalog *getCatalog() { return catalog; } - - // Get base stream. - BaseStream *getBaseStream() { return str; } - - // Get page parameters. - double getPageMediaWidth(int page) - { return catalog->getPage(page)->getMediaWidth(); } - double getPageMediaHeight(int page) - { return catalog->getPage(page)->getMediaHeight(); } - double getPageCropWidth(int page) - { return catalog->getPage(page)->getCropWidth(); } - double getPageCropHeight(int page) - { return catalog->getPage(page)->getCropHeight(); } - int getPageRotate(int page) - { return catalog->getPage(page)->getRotate(); } - - // Get number of pages. - int getNumPages() { return catalog->getNumPages(); } - - // Return the contents of the metadata stream, or NULL if there is - // no metadata. - GString *readMetadata() { return catalog->readMetadata(); } - - // Return the structure tree root object. - Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); } - - // 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); - - // 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); - - // 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); - - // 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 is not a destination. - LinkDest *findDest(GString *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() { return outline; } -#endif - - // Return the OptionalContent object. - OptionalContent *getOptionalContent() { return optContent; } - - // Is the file encrypted? - GBool isEncrypted() { return xref->isEncrypted(); } - - // Check various permissions. - GBool okToPrint(GBool ignoreOwnerPW = gFalse) - { return xref->okToPrint(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); } - - // 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. - double getPDFVersion() { return pdfVersion; } - - // Save this file with another name. - GBool saveAs(GString *name); - - // Return a pointer to the PDFCore object. - PDFCore *getCore() { return core; } - - // Get the list of embedded files. - int getNumEmbeddedFiles() { return catalog->getNumEmbeddedFiles(); } - Unicode *getEmbeddedFileName(int idx) - { return catalog->getEmbeddedFileName(idx); } - int getEmbeddedFileNameLength(int idx) - { return catalog->getEmbeddedFileNameLength(idx); } - GBool saveEmbeddedFile(int idx, char *path); -#ifdef WIN32 - GBool saveEmbeddedFile(int idx, wchar_t *path, int pathLen); -#endif - - -private: - - GBool setup(GString *ownerPassword, GString *userPassword); - void checkHeader(); - GBool checkEncryption(GString *ownerPassword, GString *userPassword); - GBool saveEmbeddedFile2(int idx, FILE *f); - - GString *fileName; -#ifdef WIN32 - wchar_t *fileNameU; -#endif - FILE *file; - BaseStream *str; - PDFCore *core; - double pdfVersion; - XRef *xref; - Catalog *catalog; -#ifndef DISABLE_OUTLINE - Outline *outline; -#endif - OptionalContent *optContent; - - - GBool ok; - int errCode; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.cc b/thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.cc deleted file mode 100644 index 89dc3828..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.cc +++ /dev/null @@ -1,44 +0,0 @@ -//======================================================================== -// -// PDFDocEncoding.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include "PDFDocEncoding.h" - -Unicode pdfDocEncoding[256] = { - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 00 - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 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, 0x0000, - 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, 0x0000, - 0x20ac, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, // a0 - 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x0000, 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/thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.h b/thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.h deleted file mode 100644 index 3259d3e1..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PDFDocEncoding.h +++ /dev/null @@ -1,16 +0,0 @@ -//======================================================================== -// -// PDFDocEncoding.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PDFDOCENCODING_H -#define PDFDOCENCODING_H - -#include "CharTypes.h" - -extern Unicode pdfDocEncoding[256]; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.cc deleted file mode 100644 index 784bdd38..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.cc +++ /dev/null @@ -1,6451 +0,0 @@ -//======================================================================== -// -// PSOutputDev.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#include -#include "GString.h" -#include "GList.h" -#include "GHash.h" -#include "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 "FoFiType1C.h" -#include "FoFiTrueType.h" -#include "Catalog.h" -#include "Page.h" -#include "Stream.h" -#include "Annot.h" -#include "PDFDoc.h" -#include "XRef.h" -#include "PreScanOutputDev.h" -#if HAVE_SPLASH -# include "Splash.h" -# include "SplashBitmap.h" -# include "SplashOutputDev.h" -#endif -#include "PSOutputDev.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 - -//------------------------------------------------------------------------ - -// Max size of a slice when rasterizing pages, in pixels. -#define rasterizationSliceSize 20000000 - -//------------------------------------------------------------------------ -// 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 {", - " /setpagedevice where {", - " pop 2 dict begin", - " /Policies 1 dict dup begin /PageSize 6 def end def", - " { /Duplex true def } if", - " currentdict end setpagedevice", - " } {", - " pop", - " } ifelse", - "} def", - "/pdfSetupPaper {", - " 2 array astore", - " /setpagedevice where {", - " pop 2 dict begin", - " /PageSize exch def", - " /ImagingBBox null def", - " currentdict end setpagedevice", - " } {", - " pop", - " } ifelse", - "} def", - "~1sn", - "/pdfOpNames [", - " /pdfFill /pdfStroke /pdfLastFill /pdfLastStroke", - " /pdfTextMat /pdfFontSize /pdfCharSpacing /pdfTextRender", - " /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", - " /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", - "/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", - "/xyshow where {", - " pop", - " /xyshow2 {", - " dup length array", - " 0 2 2 index length 1 sub {", - " 2 index 1 index 2 copy get 3 1 roll 1 add get", - " pdfTextMat dtransform", - " 4 2 roll 2 copy 6 5 roll put 1 add 3 1 roll dup 4 2 roll put", - " } for", - " exch pop", - " xyshow", - " } def", - "}{", - " /xyshow2 {", - " currentfont /FontType get 0 eq {", - " 0 2 3 index length 1 sub {", - " currentpoint 4 index 3 index 2 getinterval show moveto", - " 2 copy get 2 index 3 2 roll 1 add get", - " pdfTextMat dtransform rmoveto", - " } for", - " } {", - " 0 1 3 index length 1 sub {", - " currentpoint 4 index 3 index 1 getinterval show moveto", - " 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get", - " pdfTextMat dtransform rmoveto", - " } for", - " } ifelse", - " pop pop", - " } def", - "} ifelse", - "/cshow where {", - " pop", - " /xycp {", // xycharpath - " 0 3 2 roll", - " {", - " pop pop currentpoint 3 2 roll", - " 1 string dup 0 4 3 roll put false charpath moveto", - " 2 copy get 2 index 2 index 1 add get", - " pdfTextMat dtransform rmoveto", - " 2 add", - " } exch cshow", - " pop pop", - " } def", - "}{", - " /xycp {", // xycharpath - " currentfont /FontType get 0 eq {", - " 0 2 3 index length 1 sub {", - " currentpoint 4 index 3 index 2 getinterval false charpath moveto", - " 2 copy get 2 index 3 2 roll 1 add get", - " pdfTextMat dtransform rmoveto", - " } for", - " } {", - " 0 1 3 index length 1 sub {", - " currentpoint 4 index 3 index 1 getinterval false charpath moveto", - " 2 copy 2 mul get 2 index 3 2 roll 2 mul 1 add get", - " pdfTextMat dtransform rmoveto", - " } for", - " } ifelse", - " pop pop", - " } def", - "} ifelse", - "/Tj {", - " fCol", // because stringwidth has to draw Type 3 chars - " 0 pdfTextRise pdfTextMat dtransform rmoveto", - " currentpoint 4 2 roll", - " pdfTextRender 1 and 0 eq {", - " 2 copy xyshow2", - " } if", - " pdfTextRender 3 and dup 1 eq exch 2 eq or {", - " 3 index 3 index moveto", - " 2 copy", - " currentfont /FontType get 3 eq { fCol } { sCol } ifelse", - " xycp currentpoint stroke moveto", - " } if", - " pdfTextRender 4 and 0 ne {", - " 4 2 roll moveto xycp", - " /pdfTextClipPath [ pdfTextClipPath aload pop", - " {/moveto cvx}", - " {/lineto cvx}", - " {/curveto cvx}", - " {/closepath cvx}", - " pathforall ] def", - " currentpoint newpath moveto", - " } {", - " pop pop pop pop", - " } ifelse", - " 0 pdfTextRise neg pdfTextMat dtransform rmoveto", - "} def", - "/TJm { 0.001 mul pdfFontSize mul pdfHorizScaling mul neg 0", - " pdfTextMat dtransform rmoveto } def", - "/TJmV { 0.001 mul pdfFontSize mul neg 0 exch", - " pdfTextMat dtransform rmoveto } def", - "/Tclip { pdfTextClipPath cvx exec clip newpath", - " /pdfTextClipPath [] def } def", - "~1ns", - "% Level 1 image operators", - "~1n", - "/pdfIm1 {", - " /pdfImBuf1 4 index string def", - " { currentfile pdfImBuf1 readhexstring 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", - "~1ns", - "/pdfImM1 {", - " fCol /pdfImBuf1 4 index 7 add 8 idiv string def", - " { currentfile pdfImBuf1 readhexstring pop } imagemask", - "} def", - "/pdfImStr {", - " 2 copy exch length lt {", - " 2 copy get exch 1 add exch", - " } {", - " ()", - " } ifelse", - "} def", - "/pdfImM1a {", - " { pdfImStr } imagemask", - " pop pop", - "} def", - "~23sn", - "% Level 2/3 image operators", - "/pdfImBuf 100 string def", - "/pdfImStr {", - " 2 copy exch length lt {", - " 2 copy get exch 1 add exch", - " } {", - " ()", - " } ifelse", - "} def", - "/skipEOD {", - " { currentfile pdfImBuf readline", - " not { pop exit } if", - " (%-EOD-) eq { exit } if } loop", - "} def", - "/pdfIm { image skipEOD } def", - "~3sn", - "/pdfMask {", - " /ReusableStreamDecode filter", - " skipEOD", - " /maskStream exch def", - "} def", - "/pdfMaskEnd { maskStream closefile } 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", - " skipEOD", - "} def", - "~23sn", - "/pdfImM { fCol imagemask skipEOD } def", - "/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> ", - " endcodespacerange", - " 0 usefont", - " 1 begincidrange", - " <0000> 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> ", - " endcodespacerange", - " 0 usefont", - " 1 begincidrange", - " <0000> 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 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 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} -}; - -// Mapping from Type 1/1C font file to PS font name. -struct PST1FontName { - Ref fontFileID; - GString *psName; // PostScript font name used for this - // embedded font file -}; - -// Info for 8-bit fonts -struct PSFont8Info { - Ref fontID; - int *codeToGID; // code-to-GID mapping for TrueType fonts -}; - -// Encoding info for substitute 16-bit font -struct PSFont16Enc { - Ref fontID; - GString *enc; // NULL means font wasn't correctly substituted -}; - -//------------------------------------------------------------------------ -// 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, GString *nameA); - ~PSOutCustomColor(); - - double c, m, y, k; - GString *name; - PSOutCustomColor *next; -}; - -PSOutCustomColor::PSOutCustomColor(double cA, double mA, - double yA, double kA, GString *nameA) { - c = cA; - m = mA; - y = yA; - k = kA; - name = nameA; - next = NULL; -} - -PSOutCustomColor::~PSOutCustomColor() { - delete name; -} - -//------------------------------------------------------------------------ - -struct PSOutImgClipRect { - int x0, x1, y0, y1; -}; - -//------------------------------------------------------------------------ - -struct PSOutPaperSize { - PSOutPaperSize(int wA, int hA) { w = wA; h = hA; } - int w, h; -}; - -//------------------------------------------------------------------------ -// 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 GString *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(char *fileName, PDFDoc *docA, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool manualCtrlA, - PSOutCustomCodeCbk customCodeCbkA, - void *customCodeCbkDataA) { - FILE *f; - PSFileType fileTypeA; - - underlayCbk = NULL; - underlayCbkData = NULL; - overlayCbk = NULL; - overlayCbkData = NULL; - customCodeCbk = customCodeCbkA; - customCodeCbkData = customCodeCbkDataA; - - fontIDs = NULL; - fontNames = new GHash(gTrue); - t1FontNames = NULL; - font8Info = NULL; - font16Enc = NULL; - imgIDs = NULL; - formIDs = NULL; - xobjStack = NULL; - paperSizes = NULL; - embFontList = NULL; - customColors = NULL; - haveTextClip = gFalse; - t3String = NULL; - - // 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(errIO, -1, "Couldn't run print command '{0:s}'", fileName); - ok = gFalse; - return; - } -#else - error(errIO, -1, "Print commands are not supported ('{0:s}')", fileName); - ok = gFalse; - return; -#endif - } else { - fileTypeA = psFile; - if (!(f = fopen(fileName, "w"))) { - error(errIO, -1, "Couldn't open PostScript file '{0:s}'", fileName); - ok = gFalse; - return; - } - } - - init(outputToFile, f, fileTypeA, - docA, firstPage, lastPage, modeA, - imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA); -} - -PSOutputDev::PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA, - PDFDoc *docA, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool manualCtrlA, - PSOutCustomCodeCbk customCodeCbkA, - void *customCodeCbkDataA) { - underlayCbk = NULL; - underlayCbkData = NULL; - overlayCbk = NULL; - overlayCbkData = NULL; - customCodeCbk = customCodeCbkA; - customCodeCbkData = customCodeCbkDataA; - - fontIDs = NULL; - fontNames = new GHash(gTrue); - t1FontNames = NULL; - font8Info = NULL; - font16Enc = NULL; - imgIDs = NULL; - formIDs = NULL; - xobjStack = NULL; - paperSizes = NULL; - embFontList = NULL; - customColors = NULL; - haveTextClip = gFalse; - t3String = NULL; - - init(outputFuncA, outputStreamA, psGeneric, - docA, firstPage, lastPage, modeA, - imgLLXA, imgLLYA, imgURXA, imgURYA, manualCtrlA); -} - -void PSOutputDev::init(PSOutputFunc outputFuncA, void *outputStreamA, - PSFileType fileTypeA, PDFDoc *docA, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool manualCtrlA) { - Catalog *catalog; - Page *page; - PDFRectangle *box; - PSOutPaperSize *size; - GList *names; - int pg, w, h, i; - - // initialize - ok = gTrue; - outputFunc = outputFuncA; - outputStream = outputStreamA; - fileType = fileTypeA; - doc = docA; - xref = doc->getXRef(); - catalog = doc->getCatalog(); - level = globalParams->getPSLevel(); - mode = modeA; - paperWidth = globalParams->getPSPaperWidth(); - paperHeight = globalParams->getPSPaperHeight(); - imgLLX = imgLLXA; - imgLLY = imgLLYA; - imgURX = imgURXA; - imgURY = imgURYA; - if (imgLLX == 0 && imgURX == 0 && imgLLY == 0 && imgURY == 0) { - globalParams->getPSImageableArea(&imgLLX, &imgLLY, &imgURX, &imgURY); - } - if (paperWidth < 0 || paperHeight < 0) { - paperMatch = gTrue; - paperSizes = new GList(); - paperWidth = paperHeight = 1; // in case the document has zero pages - for (pg = (firstPage >= 1) ? firstPage : 1; - pg <= lastPage && pg <= catalog->getNumPages(); - ++pg) { - page = catalog->getPage(pg); - w = (int)ceil(page->getMediaWidth()); - h = (int)ceil(page->getMediaHeight()); - for (i = 0; i < paperSizes->getLength(); ++i) { - size = (PSOutPaperSize *)paperSizes->get(i); - if (size->w == w && size->h == h) { - break; - } - } - if (i == paperSizes->getLength()) { - paperSizes->append(new PSOutPaperSize(w, h)); - } - if (w > paperWidth) { - paperWidth = w; - } - if (h > paperHeight) { - paperHeight = h; - } - } - // NB: img{LLX,LLY,URX,URY} will be set by startPage() - } else { - paperMatch = gFalse; - } - preload = globalParams->getPSPreload(); - 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 and fontNames lists - fontIDSize = 64; - fontIDLen = 0; - fontIDs = (Ref *)gmallocn(fontIDSize, sizeof(Ref)); - for (i = 0; psFonts[i]; ++i) { - fontNames->add(new GString(psFonts[i]), 1); - } - names = globalParams->getPSFontNames(); - for (i = 0; i < names->getLength(); ++i) { - fontNames->add((GString *)names->get(i), 1); - } - delete names; - t1FontNameSize = 64; - t1FontNameLen = 0; - t1FontNames = (PST1FontName *)gmallocn(t1FontNameSize, sizeof(PST1FontName)); - font8InfoLen = 0; - font8InfoSize = 0; - font16EncLen = 0; - font16EncSize = 0; - imgIDLen = 0; - imgIDSize = 0; - formIDLen = 0; - formIDSize = 0; - - xobjStack = new GList(); - numSaves = 0; - numTilingPatterns = 0; - nextFunc = 0; - - // initialize embedded font resource comment list - embFontList = new GString(); - - if (!manualCtrl) { - // this check is needed in case the document has zero pages - if (firstPage > 0 && firstPage <= catalog->getNumPages()) { - writeHeader(firstPage, lastPage, - catalog->getPage(firstPage)->getMediaBox(), - catalog->getPage(firstPage)->getCropBox(), - catalog->getPage(firstPage)->getRotate()); - } else { - box = new PDFRectangle(0, 0, 1, 1); - writeHeader(firstPage, lastPage, box, box, 0); - delete box; - } - if (mode != psModeForm) { - writePS("%%BeginProlog\n"); - } - writeXpdfProcset(); - if (mode != psModeForm) { - writePS("%%EndProlog\n"); - writePS("%%BeginSetup\n"); - } - writeDocSetup(catalog, firstPage, lastPage); - 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 (paperSizes) { - deleteGList(paperSizes, PSOutPaperSize); - } - if (embFontList) { - delete embFontList; - } - if (fontIDs) { - gfree(fontIDs); - } - delete fontNames; - if (t1FontNames) { - for (i = 0; i < t1FontNameLen; ++i) { - delete t1FontNames[i].psName; - } - gfree(t1FontNames); - } - if (font8Info) { - for (i = 0; i < font8InfoLen; ++i) { - gfree(font8Info[i].codeToGID); - } - gfree(font8Info); - } - if (font16Enc) { - for (i = 0; i < font16EncLen; ++i) { - if (font16Enc[i].enc) { - 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) { - Object info, obj1; - PSOutPaperSize *size; - double x1, y1, x2, y2; - int i; - - switch (mode) { - 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("%XpdfVersion: {0:s}\n", xpdfVersion); - xref->getDocInfo(&info); - if (info.isDict() && info.dictLookup("Creator", &obj1)->isString()) { - writePS("%%Creator: "); - writePSTextLine(obj1.getString()); - } - obj1.free(); - if (info.isDict() && info.dictLookup("Title", &obj1)->isString()) { - writePS("%%Title: "); - writePSTextLine(obj1.getString()); - } - obj1.free(); - info.free(); - 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"); - - switch (mode) { - case psModePS: - if (paperMatch) { - for (i = 0; i < paperSizes->getLength(); ++i) { - size = (PSOutPaperSize *)paperSizes->get(i); - writePSFmt("%%{0:s} {1:d}x{2:d} {1:d} {2:d} 0 () ()\n", - i==0 ? "DocumentMedia:" : "+", size->w, size->h); - } - } else { - 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"); - if (!paperMatch) { - 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("%%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", xpdfVersion); - 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(Catalog *catalog, - int firstPage, int lastPage) { - Page *page; - Dict *resDict; - Annots *annots; - Object *acroForm; - Object obj1, obj2, obj3; - GString *s; - 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 = catalog->getPage(pg); - if ((resDict = page->getResourceDict())) { - setupResources(resDict); - } - annots = new Annots(doc, 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 ((acroForm = catalog->getAcroForm()) && acroForm->isDict()) { - if (acroForm->dictLookup("DR", &obj1)->isDict()) { - setupResources(obj1.getDict()); - } - obj1.free(); - if (acroForm->dictLookup("Fields", &obj1)->isArray()) { - for (i = 0; i < obj1.arrayGetLength(); ++i) { - if (obj1.arrayGet(i, &obj2)->isDict()) { - if (obj2.dictLookup("DR", &obj3)->isDict()) { - setupResources(obj3.getDict()); - } - obj3.free(); - } - obj2.free(); - } - } - obj1.free(); - } - if (mode != psModeForm) { - if (mode != psModeEPS && !manualCtrl) { - writePSFmt("{0:s} pdfSetup\n", - globalParams->getPSDuplex() ? "true" : "false"); - if (!paperMatch) { - writePSFmt("{0:d} {1:d} pdfSetupPaper\n", paperWidth, paperHeight); - } - } -#if OPI_SUPPORT - if (globalParams->getPSOPI()) { - writePS("/opiMatrix matrix currentmatrix def\n"); - } -#endif - } - if (customCodeCbk) { - if ((s = (*customCodeCbk)(this, psOutCustomDocSetup, 0, - customCodeCbkData))) { - writePS(s->getCString()); - delete s; - } - } -} - -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) { - writePS(" "); - writePSString(cc->name); - } - writePS("\n"); - writePS("%%CMYKCustomColor:\n"); - for (cc = customColors; cc; cc = cc->next) { - writePSFmt("%%+ {0:.4g} {1:.4g} {2:.4g} {3:.4g} ", - cc->c, cc->m, cc->y, cc->k); - writePSString(cc->name); - writePS("\n"); - } - } - } -} - -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; - - 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; - GString *name; - PSFontParam *fontParam; - GString *psName; - char buf[16]; - GBool subst; - UnicodeMap *uMap; - char *charName; - double xs, ys; - int code; - double w1, w2; - double *fm; - int i, j; - - // 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 GString(fontParam->psFontName->getCString()); - - // check for embedded Type 1 font - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1 && - font->getEmbeddedFontID(&fontFileID)) { - // this assumes that the PS font name matches the PDF font name - psName = font->getEmbeddedFontName()->copy(); - setupEmbeddedType1Font(&fontFileID, psName); - - // check for embedded Type 1C font - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1C && - font->getEmbeddedFontID(&fontFileID)) { - psName = makePSFontName(font, &fontFileID); - setupEmbeddedType1CFont(font, &fontFileID, psName); - - // check for embedded OpenType - Type 1C font - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1COT && - font->getEmbeddedFontID(&fontFileID)) { - psName = makePSFontName(font, &fontFileID); - setupEmbeddedOpenTypeT1CFont(font, &fontFileID, psName); - - // check for external Type 1 font file - } else if (globalParams->getPSEmbedType1() && - font->getType() == fontType1 && - font->getExtFontFile()) { - // 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)) { - psName = makePSFontName(font, font->getID()); - setupEmbeddedTrueTypeFont(font, &fontFileID, psName); - - // check for external TrueType font file - } else if (globalParams->getPSEmbedTrueType() && - font->getType() == fontTrueType && - font->getExtFontFile()) { - psName = makePSFontName(font, font->getID()); - setupExternalTrueTypeFont(font, psName); - - // check for embedded CID PostScript font - } else if (globalParams->getPSEmbedCIDPostScript() && - font->getType() == fontCIDType0C && - font->getEmbeddedFontID(&fontFileID)) { - psName = makePSFontName(font, &fontFileID); - setupEmbeddedCIDType0Font(font, &fontFileID, psName); - - // check for embedded CID TrueType font - } else if (globalParams->getPSEmbedCIDTrueType() && - (font->getType() == fontCIDType2 || - font->getType() == fontCIDType2OT) && - font->getEmbeddedFontID(&fontFileID)) { - psName = makePSFontName(font, font->getID()); - //~ should check to see if font actually uses vertical mode - setupEmbeddedCIDTrueTypeFont(font, &fontFileID, psName, gTrue); - - // check for embedded OpenType - CID CFF font - } else if (globalParams->getPSEmbedCIDPostScript() && - font->getType() == fontCIDType0COT && - font->getEmbeddedFontID(&fontFileID)) { - psName = makePSFontName(font, &fontFileID); - setupEmbeddedOpenTypeCFFFont(font, &fontFileID, psName); - - // check for Type 3 font - } else if (font->getType() == fontType3) { - psName = GString::format("T3_{0:d}_{1:d}", - font->getID()->num, font->getID()->gen); - setupType3Font(font, psName, parentResDict); - - // if font passthrough is requested, just pass the font name through - // without substitution - } else if (globalParams->getPSFontPassthrough()) { - psName = font->getName()->copy(); - - // 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 GString(psFonts[i]); - break; - } - } - } - if (!psName) { - 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 GString(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; - } - 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(); - if ((uMap = globalParams->getUnicodeMap(fontParam->encoding))) { - font16Enc[font16EncLen].enc = fontParam->encoding->copy(); - uMap->decRefCnt(); - } else { - error(errSyntaxError, -1, - "Couldn't find Unicode map for 16-bit font encoding '{0:t}'", - fontParam->encoding); - font16Enc[font16EncLen].enc = NULL; - } - ++font16EncLen; - - // give up - can't do anything with this font - } else { - error(errSyntaxError, -1, - "Couldn't find a font to substitute for '{0:s}' ('{1:s}' character collection)", - font->getName() ? font->getName()->getCString() : "(unnamed)", - ((GfxCIDFont *)font)->getCollection() - ? ((GfxCIDFont *)font)->getCollection()->getCString() - : "(unknown)"); - if (font16EncLen >= font16EncSize) { - font16EncSize += 16; - font16Enc = (PSFont16Enc *)greallocn(font16Enc, - font16EncSize, sizeof(PSFont16Enc)); - } - font16Enc[font16EncLen].fontID = *font->getID(); - font16Enc[font16EncLen].enc = NULL; - ++font16EncLen; - 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); - } - 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, GString *psName) { - static char hexChar[17] = "0123456789abcdef"; - Object refObj, strObj, obj1, obj2, obj3; - Dict *dict; - int length1, length2, length3; - int c; - int start[4]; - GBool binMode; - int i; - - // check if font is already embedded - if (fontNames->lookupInt(psName)) { - return; - } - - // get the font stream and info - refObj.initRef(id->num, id->gen); - refObj.fetch(xref, &strObj); - refObj.free(); - if (!strObj.isStream()) { - error(errSyntaxError, -1, "Embedded font file object is not a stream"); - goto err1; - } - if (!(dict = strObj.streamGetDict())) { - error(errSyntaxError, -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(errSyntaxError, -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(errSyntaxError, -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; - } - - // 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); - } - } - - // 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(GString *fileName, GString *psName) { - FILE *fontFile; - int c; - - // check if font is already embedded - if (fontNames->lookupInt(psName)) { - return; - } - - // 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(errIO, -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, - GString *psName) { - char *fontBuf; - int fontLen; - FoFiType1C *ffT1C; - int i; - - // check if font is already embedded - for (i = 0; i < t1FontNameLen; ++i) { - if (t1FontNames[i].fontFileID.num == id->num && - t1FontNames[i].fontFileID.gen == id->gen) { - psName->clear(); - psName->insert(0, t1FontNames[i].psName); - return; - } - } - if (t1FontNameLen == t1FontNameSize) { - t1FontNameSize *= 2; - t1FontNames = (PST1FontName *)greallocn(t1FontNames, t1FontNameSize, - sizeof(PST1FontName)); - } - t1FontNames[t1FontNameLen].fontFileID = *id; - t1FontNames[t1FontNameLen].psName = psName->copy(); - ++t1FontNameLen; - - // 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 - if ((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, - GString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int i; - - // check if font is already embedded - for (i = 0; i < t1FontNameLen; ++i) { - if (t1FontNames[i].fontFileID.num == id->num && - t1FontNames[i].fontFileID.gen == id->gen) { - psName->clear(); - psName->insert(0, t1FontNames[i].psName); - return; - } - } - if (t1FontNameLen == t1FontNameSize) { - t1FontNameSize *= 2; - t1FontNames = (PST1FontName *)greallocn(t1FontNames, t1FontNameSize, - sizeof(PST1FontName)); - } - t1FontNames[t1FontNameLen].fontFileID = *id; - t1FontNames[t1FontNameLen].psName = psName->copy(); - ++t1FontNameLen; - - // 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 - if ((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, - GString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int *codeToGID; - - // 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 - if ((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"); -} - -void PSOutputDev::setupExternalTrueTypeFont(GfxFont *font, GString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int *codeToGID; - - // 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"); -} - -void PSOutputDev::setupEmbeddedCIDType0Font(GfxFont *font, Ref *id, - GString *psName) { - char *fontBuf; - int fontLen; - FoFiType1C *ffT1C; - int i; - - // check if font is already embedded - for (i = 0; i < t1FontNameLen; ++i) { - if (t1FontNames[i].fontFileID.num == id->num && - t1FontNames[i].fontFileID.gen == id->gen) { - psName->clear(); - psName->insert(0, t1FontNames[i].psName); - return; - } - } - if (t1FontNameLen == t1FontNameSize) { - t1FontNameSize *= 2; - t1FontNames = (PST1FontName *)greallocn(t1FontNames, t1FontNameSize, - sizeof(PST1FontName)); - } - t1FontNames[t1FontNameLen].fontFileID = *id; - t1FontNames[t1FontNameLen].psName = psName->copy(); - ++t1FontNameLen; - - // 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 - if ((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, - GString *psName, - GBool needVerticalMetrics) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - - // 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 - if ((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, - GString *psName) { - char *fontBuf; - int fontLen; - FoFiTrueType *ffTT; - int i; - - // check if font is already embedded - for (i = 0; i < t1FontNameLen; ++i) { - if (t1FontNames[i].fontFileID.num == id->num && - t1FontNames[i].fontFileID.gen == id->gen) { - psName->clear(); - psName->insert(0, t1FontNames[i].psName); - return; - } - } - if (t1FontNameLen == t1FontNameSize) { - t1FontNameSize *= 2; - t1FontNames = (PST1FontName *)greallocn(t1FontNames, t1FontNameSize, - sizeof(PST1FontName)); - } - t1FontNames[t1FontNameLen].fontFileID = *id; - t1FontNames[t1FontNameLen].psName = psName->copy(); - ++t1FontNameLen; - - // 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 - if ((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, GString *psName, - Dict *parentResDict) { - Dict *resDict; - Dict *charProcs; - Object charProc; - Gfx *gfx; - PDFRectangle box; - double *m; - GString *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(doc, this, resDict, &box, NULL); - inType3Char = gTrue; - for (i = 0; i < charProcs->getLength(); ++i) { - t3FillColorOnly = gFalse; - t3Cacheable = gFalse; - t3NeedsRestore = gFalse; - writePS("/"); - writePSName(charProcs->getKey(i)); - writePS(" {\n"); - gfx->display(charProcs->getVal(i, &charProc)); - charProc.free(); - if (t3String) { - if (t3Cacheable) { - buf = GString::format("{0:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g} setcachedevice\n", - t3WX, t3WY, t3LLX, t3LLY, t3URX, t3URY); - } else { - buf = GString::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"); -} - -// Make a unique PS font name, based on the names given in the PDF -// font object, and an object ID (font file object for -GString *PSOutputDev::makePSFontName(GfxFont *font, Ref *id) { - GString *psName, *s; - - if ((s = font->getEmbeddedFontName())) { - psName = filterPSName(s); - if (!fontNames->lookupInt(psName)) { - fontNames->add(psName->copy(), 1); - return psName; - } - delete psName; - } - if ((s = font->getOrigName())) { - psName = filterPSName(s); - if (!fontNames->lookupInt(psName)) { - fontNames->add(psName->copy(), 1); - return psName; - } - delete psName; - } - psName = GString::format("FF{0:d}_{1:d}", id->num, id->gen); - if ((s = font->getEmbeddedFontName())) { - s = filterPSName(s); - psName->append('_')->append(s); - delete s; - } else if ((s = font->getOrigName())) { - s = filterPSName(s); - psName->append('_')->append(s); - delete s; - } - fontNames->add(psName->copy(), 1); - return psName; -} - -void PSOutputDev::setupImages(Dict *resDict) { - Object xObjDict, xObj, xObjRef, subtypeObj; - int i; - - if (!(mode == psModeForm || inType3Char || 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("Image")) { - if (xObjRef.isRef()) { - setupImage(xObjRef.getRef(), xObj.getStream()); - } else { - error(errSyntaxError, -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; - GString *s; - int c; - int size, line, col, i; - - // 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 { - if (globalParams->getPSUncompressPreloadedImages()) { - useRLE = gFalse; - useCompressed = gFalse; - } else { - s = str->getPSFilter(level < psLevel3 ? 2 : 3, ""); - if (s) { - useRLE = gFalse; - useCompressed = gTrue; - delete s; - } else { - useRLE = gTrue; - useCompressed = gFalse; - } - } - useASCIIHex = 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 (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; - } - writePSFmt("{0:d} array dup /ImData_{1:d}_{2:d} exch def\n", - size, id.num, id.gen); - str->close(); - - // write the data into the array - str->reset(); - line = col = 0; - writePS((char *)(useASCIIHex ? "dup 0 <" : "dup 0 <~")); - do { - 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; - } - } - // each line is: "dup nnnnn <~...data...~> put" - // 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; - writePSFmt((char *)(useASCIIHex ? "dup {0:d} <" : "dup {0:d} <~"), line); - col = 0; - } - } while (c != (useASCIIHex ? '>' : '~') && c != EOF); - writePS((char *)(useASCIIHex ? "> put\n" : "~> put\n")); - if (useRLE) { - ++line; - writePSFmt("{0:d} <> put\n", line); - } else { - 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(errSyntaxError, -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(errSyntaxError, -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:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] 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(doc, this, resDict, &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, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData) { -#if HAVE_SPLASH - PreScanOutputDev *scan; - GBool rasterize, mono; - double dpi; - SplashOutputDev *splashOut; - SplashColor paperColor; - PDFRectangle box; - GfxState *state; - SplashBitmap *bitmap; - Stream *str0, *str; - Object obj; - Guchar *p; - Guchar col[4]; - double hDPI2, vDPI2; - double m0, m1, m2, m3, m4, m5; - int nStripes, stripeH, stripeY; - int c, w, h, x, y, comp, i; - - scan = new PreScanOutputDev(); - page->displaySlice(scan, 72, 72, rotateA, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, abortCheckCbk, abortCheckCbkData); - rasterize = scan->usesTransparency() || scan->usesPatternImageMask(); - delete scan; - if (!rasterize) { - return gTrue; - } - - // get the rasterization parameters - dpi = globalParams->getPSRasterResolution(); - mono = globalParams->getPSRasterMono(); - - // start the PS page - page->makeBox(dpi, dpi, 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(dpi, dpi, &box, rotateA, gFalse); - startPage(page->getNum(), state); - delete state; - - // set up the SplashOutputDev - if (mono || level == psLevel1) { - paperColor[0] = 0xff; - splashOut = new SplashOutputDev(splashModeMono8, 1, gFalse, - paperColor, gFalse, gFalse); -#if SPLASH_CMYK - } else if (level == psLevel1Sep) { - paperColor[0] = paperColor[1] = paperColor[2] = paperColor[3] = 0; - splashOut = new SplashOutputDev(splashModeCMYK8, 1, gFalse, - paperColor, gFalse, gFalse); -#endif - } else { - paperColor[0] = paperColor[1] = paperColor[2] = 0xff; - splashOut = new SplashOutputDev(splashModeRGB8, 1, gFalse, - paperColor, gFalse, gFalse); - } - splashOut->startDoc(xref); - - // break the page into stripes - hDPI2 = xScale * dpi; - vDPI2 = yScale * dpi; - if (sliceW < 0 || sliceH < 0) { - if (useMediaBox) { - box = *page->getMediaBox(); - } else { - box = *page->getCropBox(); - } - sliceX = sliceY = 0; - sliceW = (int)((box.x2 - box.x1) * hDPI2 / 72.0); - sliceH = (int)((box.y2 - box.y1) * vDPI2 / 72.0); - } - nStripes = (int)ceil((double)(sliceW * sliceH) / - (double)rasterizationSliceSize); - stripeH = (sliceH + nStripes - 1) / nStripes; - - // render the stripes - for (stripeY = sliceY; stripeY < sliceH; stripeY += stripeH) { - - // rasterize a stripe - page->makeBox(hDPI2, vDPI2, 0, useMediaBox, gFalse, - sliceX, stripeY, sliceW, stripeH, &box, &crop); - m0 = box.x2 - box.x1; - m1 = 0; - m2 = 0; - m3 = box.y2 - box.y1; - m4 = box.x1; - m5 = box.y1; - page->displaySlice(splashOut, hDPI2, vDPI2, - (360 - page->getRotate()) % 360, useMediaBox, crop, - sliceX, stripeY, sliceW, stripeH, - printing, abortCheckCbk, abortCheckCbkData); - - // 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: - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1\n", - w, h, w, -h, h); - p = bitmap->getDataPtr() + (h - 1) * bitmap->getRowSize(); - i = 0; - for (y = 0; y < h; ++y) { - for (x = 0; x < w; ++x) { - writePSFmt("{0:02x}", *p++); - if (++i == 32) { - writePSChar('\n'); - i = 0; - } - } - } - if (i != 0) { - writePSChar('\n'); - } - break; - case psLevel1Sep: - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1Sep\n", - w, h, w, -h, h); - p = bitmap->getDataPtr() + (h - 1) * bitmap->getRowSize(); - i = 0; - col[0] = col[1] = col[2] = col[3] = 0; - for (y = 0; y < h; ++y) { - for (comp = 0; comp < 4; ++comp) { - for (x = 0; x < w; ++x) { - writePSFmt("{0:02x}", p[4*x + comp]); - col[comp] |= p[4*x + comp]; - if (++i == 32) { - writePSChar('\n'); - i = 0; - } - } - } - p -= bitmap->getRowSize(); - } - if (i != 0) { - writePSChar('\n'); - } - if (col[0]) { - processColors |= psProcessCyan; - } - if (col[1]) { - processColors |= psProcessMagenta; - } - if (col[2]) { - processColors |= psProcessYellow; - } - if (col[3]) { - processColors |= psProcessBlack; - } - break; - case psLevel2: - case psLevel2Sep: - case psLevel3: - case psLevel3Sep: - if (mono) { - writePS("/DeviceGray setcolorspace\n"); - } else { - 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"); - if (mono) { - writePS(" /Decode [0 1]\n"); - } else { - 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(); - p = bitmap->getDataPtr() + (h - 1) * bitmap->getRowSize(); - str0 = new MemStream((char *)p, 0, w * h * (mono ? 1 : 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; - writePSChar('\n'); - processColors |= mono ? psProcessBlack : psProcessCMYK; - break; - } - writePS("grestore\n"); - } - - delete splashOut; - - // finish the PS page - endPage(); - - return gFalse; -#else - return gTrue; -#endif -} - -void PSOutputDev::startPage(int pageNum, GfxState *state) { - Page *page; - int x1, y1, x2, y2, width, height; - int imgWidth, imgHeight, imgWidth2, imgHeight2; - GBool landscape; - GString *s; - - - if (mode == psModePS) { - writePSFmt("%%Page: {0:d} {1:d}\n", pageNum, seqPage); - if (paperMatch) { - page = doc->getCatalog()->getPage(pageNum); - imgLLX = imgLLY = 0; - imgURX = (int)ceil(page->getMediaWidth()); - imgURY = (int)ceil(page->getMediaHeight()); - writePSFmt("%%PageMedia: {0:d}x{1:d}\n", imgURX, imgURY); - writePSFmt("%%PageBoundingBox: 0 0 {0:d} {1:d}\n", imgURX, imgURY); - } - writePS("%%BeginPageSetup\n"); - } - - // underlays - if (underlayCbk) { - (*underlayCbk)(this, underlayCbkData); - } - if (overlayCbk) { - saveState(NULL); - } - - switch (mode) { - - 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 && imgWidth > imgHeight && height > imgHeight) || - (width > height && imgWidth < imgHeight && width > imgWidth)) { - rotate += 90; - landscape = gTrue; - } else { - landscape = gFalse; - } - } else { // rotate == 90 || rotate == 270 - if ((height < width && imgWidth > imgHeight && width > imgHeight) || - (height > width && imgWidth < imgHeight && height > imgWidth)) { - rotate = 270 - rotate; - landscape = gTrue; - } else { - landscape = gFalse; - } - } - } - writePSFmt("%%PageOrientation: {0:s}\n", - landscape ? "Landscape" : "Portrait"); - if (paperMatch) { - writePSFmt("{0:d} {1:d} pdfSetupPaper\n", imgURX, imgURY); - } - 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 || rotate == 180) ? tx0 : ty0; - ty += (rotate == 0 || rotate == 180) ? 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 || rotate == 180) ? imgLLX : imgLLY; - ty += (rotate == 0 || rotate == 180) ? imgLLY : -imgLLX; - if (tx != 0 || ty != 0) { - writePSFmt("{0:.6g} {1:.6g} translate\n", tx, ty); - } - if (xScale != 1 || yScale != 1) { - writePSFmt("{0:.4f} {0:.4f} scale\n", xScale); - } - 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); - } - - ++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; - } - - if (customCodeCbk) { - if ((s = (*customCodeCbk)(this, psOutCustomPageSetup, pageNum, - customCodeCbkData))) { - writePS(s->getCString()); - delete s; - } - } - - if (mode == psModePS) { - writePS("%%EndPageSetup\n"); - } -} - -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:.6g} {1:.6g} {2:.6g} {3:.6g} {4:.6g} {5:.6g}] 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:.4g} 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.0001 ? 0.0001 - : 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::saveTextPos(GfxState *state) { - writePS("currentpoint\n"); -} - -void PSOutputDev::restoreTextPos(GfxState *state) { - writePS("m\n"); -} - -void PSOutputDev::stroke(GfxState *state) { - doPath(state->getPath()); - if (inType3Char && t3FillColorOnly) { - // if we're constructing 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"); -} - -void PSOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - PDFRectangle box; - Gfx *gfx2; - - // 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]; - gfx2 = new Gfx(doc, this, resDict, &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]); - t3FillColorOnly = gTrue; - } else { - if (x1 - 1 <= x0) { - writePS("1 0 setcharwidth\n"); - } else { - writePSFmt("{0:.6g} 0 setcharwidth\n", xStep); - } - t3FillColorOnly = gFalse; - } - inType3Char = gTrue; - ++numTilingPatterns; - gfx2->display(str); - --numTilingPatterns; - inType3Char = gFalse; - writePS("} def\n"); - delete gfx2; - 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); - writePS("fCol\n"); - 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"); -} - -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 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 xMin, yMin, xMax, yMax; - double x0, y0, r0, x1, y1, r1, t0, t1; - double xa, ya, ra; - double sz, sMin, sMax, h, 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. - h = sqrt((x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0)); - if (h == 0) { - enclosed = gTrue; - theta = 0; // make gcc happy - sz = 0; // make gcc happy - } else if (r1 - r0 == 0) { - enclosed = gFalse; - theta = 0; - sz = 0; // make gcc happy - } else if (fabs(r1 - r0) >= h) { - enclosed = gTrue; - theta = 0; // make gcc happy - sz = 0; // make gcc happy - } else { - enclosed = gFalse; - sz = -r0 / (r1 - r0); - theta = asin((r1 - r0) / h); - } - 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, GString *s) { - GfxFont *font; - int wMode; - int *codeToGID; - GString *s2; - double dx, dy, originX, originY; - char *p; - UnicodeMap *uMap; - CharCode code; - Unicode u[8]; - char buf[8]; - double *dxdy; - int dxdySize, len, nChars, uLen, n, m, i, j; - - // 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) { - if (!font16Enc[i].enc) { - // font substitution failed, so don't output any text - return; - } - 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 the positioning (dx, dy) for each char in the string - nChars = 0; - p = s->getCString(); - len = s->getLength(); - s2 = new GString(); - dxdySize = font->isCIDFont() ? 8 : s->getLength(); - dxdy = (double *)gmallocn(2 * dxdySize, sizeof(double)); - while (len > 0) { - n = font->getNextChar(p, len, &code, - u, (int)(sizeof(u) / sizeof(Unicode)), &uLen, - &dx, &dy, &originX, &originY); - dx *= state->getFontSize(); - dy *= state->getFontSize(); - if (wMode) { - dy += state->getCharSpace(); - if (n == 1 && *p == ' ') { - dy += state->getWordSpace(); - } - } else { - dx += state->getCharSpace(); - if (n == 1 && *p == ' ') { - dx += state->getWordSpace(); - } - } - dx *= state->getHorizScaling(); - if (font->isCIDFont()) { - if (uMap) { - if (nChars + uLen > dxdySize) { - do { - dxdySize *= 2; - } while (nChars + uLen > dxdySize); - dxdy = (double *)greallocn(dxdy, 2 * dxdySize, sizeof(double)); - } - 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 - dxdy[2 * nChars] = dx; - dxdy[2 * nChars + 1] = dy; - ++nChars; - } - } else { - if (nChars + 1 > dxdySize) { - dxdySize *= 2; - dxdy = (double *)greallocn(dxdy, 2 * dxdySize, sizeof(double)); - } - s2->append((char)((code >> 8) & 0xff)); - s2->append((char)(code & 0xff)); - dxdy[2 * nChars] = dx; - dxdy[2 * nChars + 1] = dy; - ++nChars; - } - } else { - if (!codeToGID || codeToGID[code] >= 0) { - s2->append((char)code); - dxdy[2 * nChars] = dx; - dxdy[2 * nChars + 1] = dy; - ++nChars; - } - } - p += n; - len -= n; - } - if (uMap) { - uMap->decRefCnt(); - } - - if (nChars > 0) { - writePSString(s2); - writePS(" ["); - for (i = 0; i < 2 * nChars; ++i) { - if (i > 0) { - writePS(" "); - } - writePSFmt("{0:.6g}", dxdy[i]); - } - writePS("] Tj\n"); - } - gfree(dxdy); - delete s2; - - if (state->getRender() & 4) { - haveTextClip = gTrue; - } -} - -void PSOutputDev::endTextObject(GfxState *state) { - if (haveTextClip) { - writePS("Tclip\n"); - haveTextClip = gFalse; - } -} - -void PSOutputDev::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg) { - int len; - - len = height * ((width + 7) / 8); - switch (level) { - case psLevel1: - case psLevel1Sep: - doImageL1(ref, NULL, invert, inlineImg, str, width, height, len); - 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, - 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); - break; - case psLevel1Sep: - //~ handle indexed, separation, ... color spaces - doImageL1Sep(colorMap, gFalse, inlineImg, str, width, height, len); - 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, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert) { - int len; - - len = height * ((width * colorMap->getNumPixelComps() * - colorMap->getBits() + 7) / 8); - switch (level) { - case psLevel1: - doImageL1(ref, colorMap, gFalse, gFalse, str, width, height, len); - break; - case psLevel1Sep: - //~ handle indexed, separation, ... color spaces - doImageL1Sep(colorMap, gFalse, gFalse, str, width, height, len); - 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) { - ImageStream *imgStr; - Guchar pixBuf[gfxColorMaxComps]; - GfxGray gray; - int col, x, y, c, i; - - 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...>" - // 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 { - // set up to use the array already created by setupImages() - writePSFmt("ImData_{0:d}_{1:d} 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\n", - width, height, - width, -height, height); - } else { - writePSFmt("{0:d} {1:d} {2:s} [{3:d} 0 0 {4:d} 0 {5:d}] pdfImM1\n", - width, height, invert ? "true" : "false", - width, -height, height); - } - - // 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); - writePSFmt("{0:02x}", colToByte(gray)); - if (++i == 32) { - writePSChar('\n'); - i = 0; - } - } - } - if (i != 0) { - writePSChar('\n'); - } - str->close(); - delete imgStr; - - // imagemask - } else { - str->reset(); - i = 0; - for (y = 0; y < height; ++y) { - for (x = 0; x < width; x += 8) { - writePSFmt("{0:02x}", str->getChar() & 0xff); - if (++i == 32) { - writePSChar('\n'); - i = 0; - } - } - } - if (i != 0) { - writePSChar('\n'); - } - str->close(); - } - } -} - -void PSOutputDev::doImageL1Sep(GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len) { - ImageStream *imgStr; - Guchar *lineBuf; - Guchar pixBuf[gfxColorMaxComps]; - GfxCMYK cmyk; - int x, y, i, comp; - - // width, height, matrix, bits per component - writePSFmt("{0:d} {1:d} 8 [{2:d} 0 0 {3:d} 0 {4:d}] pdfIm1Sep\n", - width, height, - width, -height, height); - - // 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 - i = 0; - for (y = 0; y < height; ++y) { - - // read the line - 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)); - } - - // write one line of each color component - for (comp = 0; comp < 4; ++comp) { - for (x = 0; x < width; ++x) { - writePSFmt("{0:02x}", lineBuf[4*x + comp]); - if (++i == 32) { - writePSChar('\n'); - i = 0; - } - } - } - } - - if (i != 0) { - writePSChar('\n'); - } - - str->close(); - delete imgStr; - gfree(lineBuf); -} - -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; - GString *s; - int n, numComps; - GBool useRLE, useASCII, useASCIIHex, useCompressed; - GfxSeparationColorSpace *sepCS; - GfxColor color; - GfxCMYK cmyk; - int c; - int col, i, j, x0, x1, y, maskXor; - - // 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 = rectsOutLen = 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; - } - 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); - gfree(rectsOut); - gfree(rects0); - gfree(rects1); - delete imgStr; - str->close(); - - // explicit masking - } else if (maskStr) { - 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; - } - 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); - gfree(rectsOut); - gfree(rects0); - gfree(rects1); - delete imgStr; - maskStr->close(); - } - - // 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...~>" - // 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 { - // set up to use the array already created by setupImages() - writePSFmt("ImData_{0:d}_{1:d} 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) { - writePS(" /DataSource { pdfImStr }\n"); - } else { - writePS(" /DataSource currentfile\n"); - } - - // filters - if ((mode == psModeForm || inType3Char || preload) && - globalParams->getPSUncompressPreloadedImages()) { - s = NULL; - useRLE = gFalse; - useCompressed = gFalse; - useASCII = gFalse; - } else { - 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 - 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(errSyntaxError, -1, "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(); - while ((c = str->getChar()) != EOF) { - writePSChar(c); - } - 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) { - writePS("pdfImClipEnd\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; - GString *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 - - // explicit masking - if (maskStr) { - - // mask data source - writePS("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("pdfMask\n"); - - // add RunLengthEncode and ASCIIHex/85 encode filters - if (maskUseCompressed) { - maskStr = maskStr->getUndecodedStream(); - } - 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'); - writePS("%-EOD-\n"); - - // delete encoders - if (maskUseRLE || maskUseASCII) { - delete maskStr; - } - } - - // 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...~>" - // 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 { - // set up to use the array already created by setupImages() - writePSFmt("ImData_{0:d}_{1:d} 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) { - writePS(" /DataSource { pdfImStr }\n"); - } else { - writePS(" /DataSource currentfile\n"); - } - - // filters - if ((mode == psModeForm || inType3Char || preload) && - globalParams->getPSUncompressPreloadedImages()) { - s = NULL; - useRLE = gFalse; - useCompressed = gFalse; - useASCII = gFalse; - } else { - 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 maskStream\n"); - - 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"); - } - - } - - // get rid of the array and index - if (mode == psModeForm || inType3Char || preload) { - 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; - } - } - - // close the mask stream - if (maskStr) { - writePS("pdfMaskEnd\n"); - } -} - -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 (getFileSpec(&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:.4g}", 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:.4g}\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 (getFileSpec(&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:.4g} {1:.4g} {2:.4g} {3:.4g}\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:.4g} {1:.4g} {2:.4g} {3:.4g} {4:.4g} {5:.4g} {6:.4g} {7:.4g}\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:.4g} {1:.4g}\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:.4g}\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(); - } - } -} - -GBool PSOutputDev::getFileSpec(Object *fileSpec, Object *fileName) { - if (fileSpec->isString()) { - fileSpec->copy(fileName); - return gTrue; - } - if (fileSpec->isDict()) { - 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(); - fileSpec->dictLookup("F", fileName); - if (fileName->isString()) { - return gTrue; - } - fileName->free(); - } - return gFalse; -} -#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 GString(); - writePS("q\n"); - t3FillColorOnly = gTrue; - 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<> 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) <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::writePSFmt(const char *fmt, ...) { - va_list args; - GString *buf; - - va_start(args, fmt); - if (t3String) { - t3String->appendfv((char *)fmt, args); - } else { - buf = GString::formatv((char *)fmt, args); - (*outputFunc)(outputStream, buf->getCString(), buf->getLength()); - delete buf; - } - va_end(args); -} - -void PSOutputDev::writePSString(GString *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 == '%') { - writePSFmt("#{0:02x}", c & 0xff); - } else { - writePSChar(c); - } - } -} - -GString *PSOutputDev::filterPSName(GString *name) { - GString *name2; - char buf[8]; - int i; - char c; - - name2 = new GString(); - - // 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 = name->getChar(0); - if (c >= '0' && c <= '9') { - name2->append('f'); - } - - for (i = 0; i < name->getLength(); ++i) { - c = name->getChar(i); - if (c <= (char)0x20 || c >= (char)0x7f || - c == '(' || c == ')' || c == '<' || c == '>' || - c == '[' || c == ']' || c == '{' || c == '}' || - c == '/' || c == '%') { - sprintf(buf, "#%02x", c & 0xff); - name2->append(buf); - } else { - name2->append(c); - } - } - return name2; -} - -// Write a DSC-compliant . -void PSOutputDev::writePSTextLine(GString *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 - // instead of , 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/thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.h deleted file mode 100644 index 8c0f7db5..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PSOutputDev.h +++ /dev/null @@ -1,421 +0,0 @@ -//======================================================================== -// -// PSOutputDev.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PSOUTPUTDEV_H -#define PSOUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "config.h" -#include "Object.h" -#include "GlobalParams.h" -#include "OutputDev.h" - -class GHash; -class PDFDoc; -class XRef; -class Function; -class GfxPath; -class GfxFont; -class GfxColorSpace; -class GfxSeparationColorSpace; -class PDFRectangle; -struct PST1FontName; -struct PSFont8Info; -struct PSFont16Enc; -class PSOutCustomColor; -class PSOutputDev; - -//------------------------------------------------------------------------ -// PSOutputDev -//------------------------------------------------------------------------ - -enum PSOutMode { - psModePS, - psModeEPS, - psModeForm -}; - -enum PSFileType { - psFile, // write to file - psPipe, // write to pipe - psStdout, // write to stdout - psGeneric // write to a generic stream -}; - -enum PSOutCustomCodeLocation { - psOutCustomDocSetup, - psOutCustomPageSetup -}; - -typedef void (*PSOutputFunc)(void *stream, char *data, int len); - -typedef GString *(*PSOutCustomCodeCbk)(PSOutputDev *psOut, - PSOutCustomCodeLocation loc, int n, - void *data); - -class PSOutputDev: public OutputDev { -public: - - // Open a PostScript output file, and write the prolog. - PSOutputDev(char *fileName, PDFDoc *docA, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA = 0, int imgLLYA = 0, - int imgURXA = 0, int imgURYA = 0, - GBool manualCtrlA = gFalse, - PSOutCustomCodeCbk customCodeCbkA = NULL, - void *customCodeCbkDataA = NULL); - - // Open a PSOutputDev that will write to a generic stream. - PSOutputDev(PSOutputFunc outputFuncA, void *outputStreamA, - PDFDoc *docA, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA = 0, int imgLLYA = 0, - int imgURXA = 0, int imgURYA = 0, - GBool manualCtrlA = gFalse, - PSOutCustomCodeCbk customCodeCbkA = NULL, - void *customCodeCbkDataA = NULL); - - // 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() - { return 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; } - - //----- 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); - - // Write the Xpdf procset. - void writeXpdfProcset(); - - // Write the document-level setup. - void writeDocSetup(Catalog *catalog, int firstPage, int lastPage); - - // 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, - 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); - virtual void saveTextPos(GfxState *state); - virtual void restoreTextPos(GfxState *state); - - //----- path painting - virtual void stroke(GfxState *state); - virtual void fill(GfxState *state); - virtual void eoFill(GfxState *state); - virtual void tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, 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); - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading); - - //----- path clipping - virtual void clip(GfxState *state); - virtual void eoClip(GfxState *state); - virtual void clipToStrokePath(GfxState *state); - - //----- text drawing - virtual void drawString(GfxState *state, GString *s); - virtual void endTextObject(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert); - -#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; } - -private: - - void init(PSOutputFunc outputFuncA, void *outputStreamA, - PSFileType fileTypeA, PDFDoc *docA, - int firstPage, int lastPage, PSOutMode modeA, - int imgLLXA, int imgLLYA, int imgURXA, int imgURYA, - GBool manualCtrlA); - void setupResources(Dict *resDict); - void setupFonts(Dict *resDict); - void setupFont(GfxFont *font, Dict *parentResDict); - void setupEmbeddedType1Font(Ref *id, GString *psName); - void setupExternalType1Font(GString *fileName, GString *psName); - void setupEmbeddedType1CFont(GfxFont *font, Ref *id, GString *psName); - void setupEmbeddedOpenTypeT1CFont(GfxFont *font, Ref *id, GString *psName); - void setupEmbeddedTrueTypeFont(GfxFont *font, Ref *id, GString *psName); - void setupExternalTrueTypeFont(GfxFont *font, GString *psName); - void setupEmbeddedCIDType0Font(GfxFont *font, Ref *id, GString *psName); - void setupEmbeddedCIDTrueTypeFont(GfxFont *font, Ref *id, GString *psName, - GBool needVerticalMetrics); - void setupEmbeddedOpenTypeCFFFont(GfxFont *font, Ref *id, GString *psName); - void setupType3Font(GfxFont *font, GString *psName, Dict *parentResDict); - GString *makePSFontName(GfxFont *font, Ref *id); - 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 doImageL1(Object *ref, GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len); - void doImageL1Sep(GfxImageColorMap *colorMap, - GBool invert, GBool inlineImg, - Stream *str, int width, int height, int len); - 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); -#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); - GBool getFileSpec(Object *fileSpec, Object *fileName); -#endif - void cvtFunction(Function *func); - void writePSChar(char c); - void writePS(char *s); - void writePSFmt(const char *fmt, ...); - void writePSString(GString *s); - void writePSName(char *s); - GString *filterPSName(GString *name); - void writePSTextLine(GString *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 - GBool paperMatch; // true if paper size is set to match each page - int imgLLX, imgLLY, // imageable area, in pts - imgURX, imgURY; - 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; - GString *(*customCodeCbk)(PSOutputDev *psOut, - PSOutCustomCodeLocation loc, int n, - void *data); - void *customCodeCbkData; - - PDFDoc *doc; - XRef *xref; // the xref table 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 - GHash *fontNames; // all used font names - PST1FontName *t1FontNames; // font names for Type 1/1C fonts - int t1FontNameLen; // number of entries in t1FontNames array - int t1FontNameSize; // size of t1FontNames array - 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 - GList *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 - - GList *paperSizes; // list of used paper sizes, if paperMatch - // is true [PSOutPaperSize] - 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; - - GString *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 inType3Char; // inside a Type 3 CharProc - GString *t3String; // Type 3 content string - double t3WX, t3WY, // Type 3 character parameters - t3LLX, t3LLY, t3URX, t3URY; - GBool t3FillColorOnly; // operators should only use the fill color - GBool t3Cacheable; // cleared if char is not cacheable - GBool t3NeedsRestore; // set if a 'q' operator was issued - -#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/thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.cc b/thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.cc deleted file mode 100644 index 0ad37618..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.cc +++ /dev/null @@ -1,135 +0,0 @@ -//======================================================================== -// -// PSTokenizer.cc -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#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 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 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; - } - } - - // read a token - i = 0; - buf[i++] = c; - if (c == '(') { - backslash = gFalse; - while ((c = lookChar()) != EOF) { - if (i < size - 1) { - buf[i++] = c; - } - getChar(); - if (c == '\\') { - backslash = gTrue; - } else if (!backslash && c == ')') { - break; - } else { - backslash = gFalse; - } - } - } else if (c == '<') { - while ((c = lookChar()) != EOF) { - getChar(); - if (i < size - 1 && specialChars[c] != 1) { - buf[i++] = c; - } - if (c == '>') { - break; - } - } - } else if (c != '[' && c != ']') { - while ((c = lookChar()) != EOF && !specialChars[c]) { - getChar(); - if (i < size - 1) { - buf[i++] = c; - } - } - } - buf[i] = '\0'; - *length = i; - - return gTrue; -} - -int PSTokenizer::lookChar() { - if (charBuf < 0) { - charBuf = (*getCharFunc)(data); - } - return charBuf; -} - -int PSTokenizer::getChar() { - int c; - - if (charBuf < 0) { - charBuf = (*getCharFunc)(data); - } - c = charBuf; - charBuf = -1; - return c; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.h b/thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.h deleted file mode 100644 index 4d5ee97f..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PSTokenizer.h +++ /dev/null @@ -1,41 +0,0 @@ -//======================================================================== -// -// PSTokenizer.h -// -// Copyright 2002-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PSTOKENIZER_H -#define PSTOKENIZER_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "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(); - int getChar(); - - int (*getCharFunc)(void *); - void *data; - int charBuf; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Page.cc b/thirdparty/xpdf/3.02/src/xpdf/Page.cc deleted file mode 100644 index a3dc935d..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Page.cc +++ /dev/null @@ -1,480 +0,0 @@ -//======================================================================== -// -// Page.cc -// -// Copyright 1996-2007 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "GlobalParams.h" -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "PDFDoc.h" -#include "XRef.h" -#include "Link.h" -#include "OutputDev.h" -#ifndef PDF_PARSER_ONLY -#include "Gfx.h" -#include "GfxState.h" -#include "Annot.h" -#endif -#include "Error.h" -#include "Catalog.h" -#include "Page.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; - - // 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 - readBox(dict, "MediaBox", &mediaBox); - - // crop box - if (readBox(dict, "CropBox", &cropBox)) { - haveCropBox = gTrue; - } - if (!haveCropBox) { - cropBox = mediaBox; - } - - // other boxes - bleedBox = cropBox; - readBox(dict, "BleedBox", &bleedBox); - trimBox = cropBox; - readBox(dict, "TrimBox", &trimBox); - artBox = cropBox; - readBox(dict, "ArtBox", &artBox); - - // 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() { - mediaBox.x1 = mediaBox.y1 = 0; - mediaBox.x2 = mediaBox.y2 = 50; - cropBox = mediaBox; - haveCropBox = gFalse; - bleedBox = cropBox; - trimBox = cropBox; - artBox = cropBox; - rotate = 0; - lastModified.initNull(); - boxColorInfo.initNull(); - group.initNull(); - metadata.initNull(); - pieceInfo.initNull(); - separationInfo.initNull(); - resources.initNull(); -} - -PageAttrs::~PageAttrs() { - lastModified.free(); - boxColorInfo.free(); - group.free(); - metadata.free(); - pieceInfo.free(); - separationInfo.free(); - resources.free(); -} - -void PageAttrs::clipBoxes() { - cropBox.clipTo(&mediaBox); - bleedBox.clipTo(&mediaBox); - trimBox.clipTo(&mediaBox); - artBox.clipTo(&mediaBox); -} - -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 (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(PDFDoc *docA, int numA, Dict *pageDict, PageAttrs *attrsA) { - ok = gTrue; - doc = docA; - xref = doc->getXRef(); - num = numA; - - // get attributes - attrs = attrsA; - attrs->clipBoxes(); - - // annotations - pageDict->lookupNF("Annots", &annots); - if (!(annots.isRef() || annots.isArray() || annots.isNull())) { - error(errSyntaxError, -1, - "Page annotations object (page {0:d}) is wrong type ({1:s})", - num, annots.getTypeName()); - annots.free(); - goto err2; - } - - // contents - pageDict->lookupNF("Contents", &contents); - if (!(contents.isRef() || contents.isArray() || - contents.isNull())) { - error(errSyntaxError, -1, - "Page contents object (page {0:d}) is wrong type ({1:s})", - num, contents.getTypeName()); - contents.free(); - goto err1; - } - - return; - - err2: - annots.initNull(); - err1: - contents.initNull(); - ok = gFalse; -} - -Page::Page(PDFDoc *docA, int numA) { - doc = docA; - xref = doc->getXRef(); - num = numA; - attrs = new PageAttrs(); - annots.initNull(); - contents.initNull(); - ok = gTrue; -} - -Page::~Page() { - delete attrs; - annots.free(); - contents.free(); -} - -Links *Page::getLinks() { - Links *links; - Object obj; - - links = new Links(getAnnots(&obj), doc->getCatalog()->getBaseURI()); - obj.free(); - return links; -} - -void Page::display(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - GBool printing, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData) { - displaySlice(out, hDPI, vDPI, rotate, useMediaBox, crop, - -1, -1, -1, -1, printing, - abortCheckCbk, abortCheckCbkData); -} - -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, - GBool (*abortCheckCbk)(void *data), - void *abortCheckCbkData) { -#ifndef PDF_PARSER_ONLY - PDFRectangle *mediaBox, *cropBox; - PDFRectangle box; - Gfx *gfx; - Object obj; - Annots *annotList; - Dict *acroForm; - int i; - - if (!out->checkPageSlice(this, hDPI, vDPI, rotate, useMediaBox, crop, - sliceX, sliceY, sliceW, sliceH, - printing, abortCheckCbk, abortCheckCbkData)) { - return; - } - - 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(); - - if (globalParams->getPrintCommands()) { - mediaBox = getMediaBox(); - 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(doc, out, num, attrs->getResourceDict(), - hDPI, vDPI, &box, crop ? cropBox : (PDFRectangle *)NULL, - rotate, abortCheckCbk, abortCheckCbkData); - contents.fetch(xref, &obj); - if (!obj.isNull()) { - gfx->saveState(); - gfx->display(&obj); - gfx->restoreState(); - } else { - // empty pages need to call dump to do any setup required by the - // OutputDev - out->dump(); - } - obj.free(); - - // draw annotations - if (globalParams->getDrawAnnotations()) { - annotList = new Annots(doc, getAnnots(&obj)); - obj.free(); - acroForm = doc->getCatalog()->getAcroForm()->isDict() ? - doc->getCatalog()->getAcroForm()->getDict() : NULL; - if (acroForm) { - if (acroForm->lookup("NeedAppearances", &obj)) { - if (obj.isBool() && obj.getBool()) { - annotList->generateAppearances(); - } - } - obj.free(); - } - if (annotList->getNumAnnots() > 0) { - if (globalParams->getPrintCommands()) { - printf("***** Annotations\n"); - } - for (i = 0; i < annotList->getNumAnnots(); ++i) { - annotList->getAnnot(i)->draw(gfx, printing); - } - out->dump(); - } - delete annotList; - } - - delete gfx; -#endif -} - -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) { - Links *links; - int i; - - links = getLinks(); - for (i = 0; i < links->getNumLinks(); ++i) { - out->processLink(links->getLink(i)); - } - 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/thirdparty/xpdf/3.02/src/xpdf/Page.h b/thirdparty/xpdf/3.02/src/xpdf/Page.h deleted file mode 100644 index 7d05bc2b..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Page.h +++ /dev/null @@ -1,199 +0,0 @@ -//======================================================================== -// -// Page.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PAGE_H -#define PAGE_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "Object.h" - -class Dict; -class PDFDoc; -class XRef; -class OutputDev; -class Links; - -//------------------------------------------------------------------------ - -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; } - 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 - // is NULL, uses defaults. - PageAttrs(PageAttrs *attrs, Dict *dict); - - // Construct a new PageAttrs object for an empty page (only used - // when there is an error in the page tree). - PageAttrs(); - - // 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; } - GString *getLastModified() - { return lastModified.isString() - ? lastModified.getString() : (GString *)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; } - - // Clip all other boxes to the MediaBox. - void clipBoxes(); - -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(PDFDoc *docA, int numA, Dict *pageDict, PageAttrs *attrsA); - - // Create an empty page (only used when there is an error in the - // page tree). - Page(PDFDoc *docA, int numA); - - // 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(); } - GString *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 annots.fetch(xref, obj); } - - // Return a list of links. - Links *getLinks(); - - // Get contents. - Object *getContents(Object *obj) { return contents.fetch(xref, obj); } - - // Display a page. - void display(OutputDev *out, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool crop, - GBool printing, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = 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, - GBool (*abortCheckCbk)(void *data) = NULL, - void *abortCheckCbkData = NULL); - - 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); - - // Get the page's default CTM. - void getDefaultCTM(double *ctm, double hDPI, double vDPI, - int rotate, GBool useMediaBox, GBool upsideDown); - -private: - - PDFDoc *doc; - XRef *xref; // the xref table for this PDF file - int num; // page number - PageAttrs *attrs; // page attributes - Object annots; // annotations array - Object contents; // page contents - GBool ok; // true if page is valid -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Parser.cc b/thirdparty/xpdf/3.02/src/xpdf/Parser.cc deleted file mode 100644 index c43da260..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Parser.cc +++ /dev/null @@ -1,237 +0,0 @@ -//======================================================================== -// -// Parser.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "Object.h" -#include "Array.h" -#include "Dict.h" -#include "Decrypt.h" -#include "Parser.h" -#include "XRef.h" -#include "Error.h" - -// Max number of nested objects. This is used to catch infinite loops -// in the object structure. -#define recursionLimit 500 - -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, GBool simpleOnly, - Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen, int recursion) { - char *key; - Stream *str; - Object obj2; - int num; - DecryptStream *decrypt; - GString *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 (!simpleOnly && recursion < recursionLimit && buf1.isCmd("[")) { - shift(); - obj->initArray(xref); - while (!buf1.isCmd("]") && !buf1.isEOF()) - obj->arrayAdd(getObj(&obj2, gFalse, fileKey, encAlgorithm, keyLength, - objNum, objGen, recursion + 1)); - if (buf1.isEOF()) - error(errSyntaxError, getPos(), "End of file inside array"); - shift(); - - // dictionary or stream - } else if (!simpleOnly && recursion < recursionLimit && buf1.isCmd("<<")) { - shift(); - obj->initDict(xref); - while (!buf1.isCmd(">>") && !buf1.isEOF()) { - if (!buf1.isName()) { - error(errSyntaxError, getPos(), - "Dictionary key must be a name object"); - shift(); - } else { - key = copyString(buf1.getName()); - shift(); - if (buf1.isEOF() || buf1.isError()) { - gfree(key); - break; - } - obj->dictAdd(key, getObj(&obj2, gFalse, - fileKey, encAlgorithm, keyLength, - objNum, objGen, recursion + 1)); - } - } - if (buf1.isEOF()) - error(errSyntaxError, 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, recursion + 1))) { - 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 GString(); - 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 { - buf1.copy(obj); - shift(); - } - - return obj; -} - -Stream *Parser::makeStream(Object *dict, Guchar *fileKey, - CryptAlgorithm encAlgorithm, int keyLength, - int objNum, int objGen, int recursion) { - Object obj; - BaseStream *baseStr; - Stream *str; - Guint pos, endPos, length; - - // get stream start position - lexer->skipToNextLine(); - if (!(str = lexer->getStream())) { - return NULL; - } - pos = str->getPos(); - - // get length - dict->dictLookup("Length", &obj, recursion); - if (obj.isInt()) { - length = (Guint)obj.getInt(); - obj.free(); - } else { - error(errSyntaxError, getPos(), "Bad 'Length' attribute in stream"); - obj.free(); - return NULL; - } - - // 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 - lexer->setPos(pos + length); - - // refill token buffers and check for 'endstream' - shift(); // kill '>>' - shift(); // kill 'stream' - if (buf1.isCmd("endstream")) { - shift(); - } else { - error(errSyntaxError, getPos(), "Missing 'endstream'"); - // 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() { - 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(); - buf1 = buf2; - if (inlineImg > 0) // don't buffer inline image data - buf2.initNull(); - else - lexer->getObj(&buf2); -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Parser.h b/thirdparty/xpdf/3.02/src/xpdf/Parser.h deleted file mode 100644 index b25d7498..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Parser.h +++ /dev/null @@ -1,62 +0,0 @@ -//======================================================================== -// -// Parser.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PARSER_H -#define PARSER_H - -#include - -#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. If is - // true, do not parse compound objects (arrays, dictionaries, or - // streams). - Object *getObj(Object *obj, GBool simpleOnly = gFalse, - Guchar *fileKey = NULL, - CryptAlgorithm encAlgorithm = cryptRC4, int keyLength = 0, - int objNum = 0, int objGen = 0, int recursion = 0); - - // 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, int recursion); - void shift(); -}; - -#endif - diff --git a/thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.cc deleted file mode 100644 index fccd02b5..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.cc +++ /dev/null @@ -1,321 +0,0 @@ -//======================================================================== -// -// PreScanOutputDev.cc -// -// Copyright 2005 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include "GlobalParams.h" -#include "Page.h" -#include "Gfx.h" -#include "GfxFont.h" -#include "Link.h" -#include "PreScanOutputDev.h" - -//------------------------------------------------------------------------ -// PreScanOutputDev -//------------------------------------------------------------------------ - -PreScanOutputDev::PreScanOutputDev() { - 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()); -} - -void PreScanOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, - Object *str, - int paintType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - if (paintType == 1) { - gfx->drawForm(str, resDict, mat, bbox); - } else { - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); - } -} - -GBool PreScanOutputDev::functionShadedFill(GfxState *state, - GfxFunctionShading *shading) { - if (shading->getColorSpace()->getMode() != csDeviceGray && - shading->getColorSpace()->getMode() != csCalGray) { - gray = gFalse; - } - mono = gFalse; - if (state->getFillOpacity() != 1 || - state->getBlendMode() != gfxBlendNormal) { - transparency = gTrue; - } - return gTrue; -} - -GBool PreScanOutputDev::axialShadedFill(GfxState *state, - GfxAxialShading *shading) { - if (shading->getColorSpace()->getMode() != csDeviceGray && - shading->getColorSpace()->getMode() != csCalGray) { - gray = gFalse; - } - mono = gFalse; - if (state->getFillOpacity() != 1 || - state->getBlendMode() != gfxBlendNormal) { - transparency = gTrue; - } - return gTrue; -} - -GBool PreScanOutputDev::radialShadedFill(GfxState *state, - GfxRadialShading *shading) { - if (shading->getColorSpace()->getMode() != csDeviceGray && - shading->getColorSpace()->getMode() != csCalGray) { - gray = gFalse; - } - mono = gFalse; - if (state->getFillOpacity() != 1 || - state->getBlendMode() != gfxBlendNormal) { - transparency = gTrue; - } - 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->getName())) && - 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 inlineImg) { - int i, j; - - check(state->getFillColorSpace(), state->getFillColor(), - state->getFillOpacity(), state->getBlendMode()); - if (state->getFillColorSpace()->getMode() == csPattern) { - patternImgMask = gTrue; - } - gdi = gFalse; - - 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, - 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->getFillOpacity() != 1 || - 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, - Stream *maskStr, - int maskWidth, int maskHeight, - GBool maskInvert) { - 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->getFillOpacity() != 1 || - state->getBlendMode() != gfxBlendNormal) { - transparency = gTrue; - } - gdi = gFalse; -} - -void PreScanOutputDev::drawSoftMaskedImage(GfxState *state, Object *ref, - Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap) { - 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) { - transparency = gTrue; - gdi = gFalse; -} - -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; - patternImgMask = gFalse; - gdi = gTrue; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.h deleted file mode 100644 index 3889cfce..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/PreScanOutputDev.h +++ /dev/null @@ -1,155 +0,0 @@ -//======================================================================== -// -// PreScanOutputDev.h -// -// Copyright 2005 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef PRESCANOUTPUTDEV_H -#define PRESCANOUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "GfxState.h" -#include "OutputDev.h" - -//------------------------------------------------------------------------ -// PreScanOutputDev -//------------------------------------------------------------------------ - -class PreScanOutputDev: public OutputDev { -public: - - // Constructor. - PreScanOutputDev(); - - // 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 functionShadedFill(), axialShadedFill(), and - // radialShadedFill()? If this returns false, these shaded fills - // will be reduced to a series of other drawing operations. - virtual GBool useShadedFills() { 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 void tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, 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); - virtual GBool radialShadedFill(GfxState *state, GfxRadialShading *shading); - - //----- 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 inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap); - - //----- transparency groups and soft masks - virtual void beginTransparencyGroup(GfxState *state, double *bbox, - GfxColorSpace *blendingColorSpace, - GBool isolated, GBool knockout, - GBool forSoftMask); - - //----- 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() included any image mask fills with a pattern color - // space. - GBool usesPatternImageMask() { return patternImgMask; } - - // Returns true if the operations performed since the last call to - // clearStats() are all rasterizable by GDI calls in GDIOutputDev. - GBool isAllGDI() { return gdi; } - - // Clear the stats used by the above functions. - void clearStats(); - -private: - - void check(GfxColorSpace *colorSpace, GfxColor *color, - double opacity, GfxBlendMode blendMode); - - GBool mono; - GBool gray; - GBool transparency; - GBool patternImgMask; - GBool gdi; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.cc b/thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.cc deleted file mode 100644 index 0fef24cc..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.cc +++ /dev/null @@ -1,387 +0,0 @@ -//======================================================================== -// -// SecurityHandler.cc -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include "GString.h" -#include "PDFDoc.h" -#include "Decrypt.h" -#include "Error.h" -#include "GlobalParams.h" -#include "PDFCore.h" -#ifdef ENABLE_PLUGINS -# include "XpdfPluginAPI.h" -#endif -#include "SecurityHandler.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(errSyntaxError, -1, "Couldn't find the '{0:s}' security handler", - filterObj.getName()); - secHdlr = NULL; -#ifdef ENABLE_PLUGINS - } -#endif - } else { - error(errSyntaxError, -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(GString *ownerPassword, - GString *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(errCommandLine, -1, "Incorrect password"); - } - return ok; -} - -//------------------------------------------------------------------------ -// StandardSecurityHandler -//------------------------------------------------------------------------ - -class StandardAuthData { -public: - - StandardAuthData(GString *ownerPasswordA, GString *userPasswordA) { - ownerPassword = ownerPasswordA; - userPassword = userPasswordA; - } - - ~StandardAuthData() { - if (ownerPassword) { - delete ownerPassword; - } - if (userPassword) { - delete userPassword; - } - } - - GString *ownerPassword; - GString *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); - 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 - //~ (in particular, it ignores the EFF entry in encryptDictA, and - //~ doesn't handle the case where StmF, StrF, and EFF are not all the - //~ same) - 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 (!strcmp(streamFilterObj.getName(), "Identity")) { - // no encryption on streams or strings - encVersion = encRevision = -1; - } else { - 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 GString(); - } - fileIDObj1.free(); - } else { - fileID = new GString(); - } - ok = gTrue; - } else if (!(encVersion == -1 && encRevision == -1)) { - error(errUnimplemented, -1, - "Unsupported version/revision ({0:d}/{1:d}) of Standard security handler", - encVersion, encRevision); - } - } else { - error(errSyntaxError, -1, "Weird encryption info"); - } - if (fileKeyLength > 16 || fileKeyLength < 0) { - 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; - } -} - -GBool StandardSecurityHandler::isUnencrypted() { - return encVersion == -1 && encRevision == -1; -} - -void *StandardSecurityHandler::makeAuthData(GString *ownerPassword, - GString *userPassword) { - return new StandardAuthData(ownerPassword ? ownerPassword->copy() - : (GString *)NULL, - userPassword ? userPassword->copy() - : (GString *)NULL); -} - -void *StandardSecurityHandler::getAuthData() { - PDFCore *core; - GString *password; - - if (!(core = doc->getCore()) || - !(password = core->getPassword())) { - return NULL; - } - return new StandardAuthData(password, password->copy()); -} - -void StandardSecurityHandler::freeAuthData(void *authData) { - delete (StandardAuthData *)authData; -} - -GBool StandardSecurityHandler::authorize(void *authData) { - GString *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(GString *ownerPassword, - GString *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/thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.h b/thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.h deleted file mode 100644 index 651f11b2..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/SecurityHandler.h +++ /dev/null @@ -1,164 +0,0 @@ -//======================================================================== -// -// SecurityHandler.h -// -// Copyright 2004 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef SECURITYHANDLER_H -#define SECURITYHANDLER_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "Object.h" - -class GString; -class PDFDoc; -struct XpdfSecurityHandler; - -//------------------------------------------------------------------------ -// SecurityHandler -//------------------------------------------------------------------------ - -class SecurityHandler { -public: - - static SecurityHandler *make(PDFDoc *docA, Object *encryptDictA); - - SecurityHandler(PDFDoc *docA); - virtual ~SecurityHandler(); - - // Returns true if the file is actually unencrypted. - virtual GBool isUnencrypted() { return gFalse; } - - // Check the document's encryption. If the document is encrypted, - // this will first try and (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(GString *ownerPassword, - GString *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(GString *ownerPassword, - GString *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 CryptAlgorithm getEncAlgorithm() = 0; - -protected: - - PDFDoc *doc; -}; - -//------------------------------------------------------------------------ -// StandardSecurityHandler -//------------------------------------------------------------------------ - -class StandardSecurityHandler: public SecurityHandler { -public: - - StandardSecurityHandler(PDFDoc *docA, Object *encryptDictA); - virtual ~StandardSecurityHandler(); - - virtual GBool isUnencrypted(); - virtual void *makeAuthData(GString *ownerPassword, - GString *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 CryptAlgorithm getEncAlgorithm() { return encAlgorithm; } - -private: - - int permFlags; - GBool ownerPasswordOk; - Guchar fileKey[16]; - int fileKeyLength; - int encVersion; - int encRevision; - CryptAlgorithm encAlgorithm; - GBool encryptMetadata; - - GString *ownerKey, *userKey; - GString *fileID; - GBool ok; -}; - -#ifdef ENABLE_PLUGINS -//------------------------------------------------------------------------ -// ExternalSecurityHandler -//------------------------------------------------------------------------ - -class ExternalSecurityHandler: public SecurityHandler { -public: - - ExternalSecurityHandler(PDFDoc *docA, Object *encryptDictA, - XpdfSecurityHandler *xshA); - virtual ~ExternalSecurityHandler(); - - virtual void *makeAuthData(GString *ownerPassword, - GString *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/thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.cc b/thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.cc deleted file mode 100644 index 6d9e8ca3..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.cc +++ /dev/null @@ -1,3160 +0,0 @@ -//======================================================================== -// -// SplashOutputDev.cc -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include "gfile.h" -#include "GlobalParams.h" -#include "Error.h" -#include "Object.h" -#include "Gfx.h" -#include "GfxFont.h" -#include "Link.h" -#include "CharCodeToUnicode.h" -#include "FontEncodingTables.h" -#include "FoFiTrueType.h" -#include "SplashBitmap.h" -#include "SplashGlyphBitmap.h" -#include "SplashPattern.h" -#include "SplashScreen.h" -#include "SplashPath.h" -#include "SplashState.h" -#include "SplashErrorCodes.h" -#include "SplashFontEngine.h" -#include "SplashFont.h" -#include "SplashFontFile.h" -#include "SplashFontFileID.h" -#include "Splash.h" -#include "SplashOutputDev.h" - -#ifdef VMS -#if (__VMS_VER < 70000000) -extern "C" int unlink(char *filename); -#endif -#endif - -//------------------------------------------------------------------------ - -// Type 3 font cache size parameters -#define type3FontCacheAssoc 8 -#define type3FontCacheMaxSets 8 -#define type3FontCacheSize (128*1024) - -//------------------------------------------------------------------------ - -// 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); -} - -//------------------------------------------------------------------------ -// Blend functions -//------------------------------------------------------------------------ - -static void splashOutBlendMultiply(SplashColorPtr src, SplashColorPtr dest, - SplashColorPtr blend, SplashColorMode cm) { - int i; - - 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; - - 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; - - 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; - - 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; - - 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; - - 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; - - 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; - - 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; - - 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) { - 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; - - 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 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: - // NB: inputs have already been converted to additive mode - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hs, sd, vd, &r, &g, &b); - blend[0] = r; - blend[1] = g; - blend[2] = b; - blend[3] = dest[3]; - 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 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: - // NB: inputs have already been converted to additive mode - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hd, ss, vd, &r, &g, &b); - blend[0] = r; - blend[1] = g; - blend[2] = b; - blend[3] = dest[3]; - break; -#endif - } -} - -static void splashOutBlendColor(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 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: - // NB: inputs have already been converted to additive mode - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hs, ss, vd, &r, &g, &b); - blend[0] = r; - blend[1] = g; - blend[2] = b; - blend[3] = dest[3]; - 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 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: - // NB: inputs have already been converted to additive mode - cvtRGBToHSV(src[0], src[1], src[2], &hs, &ss, &vs); - cvtRGBToHSV(dest[0], dest[1], dest[2], &hd, &sd, &vd); - cvtHSVToRGB(hd, sd, vs, &r, &g, &b); - blend[0] = r; - blend[1] = g; - blend[2] = b; - blend[3] = src[3]; - break; -#endif - } -} - -// NB: This must match the GfxBlendMode enum defined in GfxState.h. -SplashBlendFunc splashOutBlendFuncs[] = { - NULL, - &splashOutBlendMultiply, - &splashOutBlendScreen, - &splashOutBlendOverlay, - &splashOutBlendDarken, - &splashOutBlendLighten, - &splashOutBlendColorDodge, - &splashOutBlendColorBurn, - &splashOutBlendHardLight, - &splashOutBlendSoftLight, - &splashOutBlendDifference, - &splashOutBlendExclusion, - &splashOutBlendHue, - &splashOutBlendSaturation, - &splashOutBlendColor, - &splashOutBlendLuminosity -}; - -//------------------------------------------------------------------------ -// Font substitutions -//------------------------------------------------------------------------ - -struct SplashOutFontSubst { - char *name; - double mWidth; -}; - -// index: {symbolic:12, fixed:8, serif:4, sans-serif:0} + bold*2 + italic -static SplashOutFontSubst splashOutSubstFonts[16] = { - {"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}, - {"Symbol", 0.576}, - {"Symbol", 0.576}, - {"Symbol", 0.576}, - {"Symbol", 0.576} -}; - -//------------------------------------------------------------------------ -// SplashOutFontFileID -//------------------------------------------------------------------------ - -class SplashOutFontFileID: public SplashFontFileID { -public: - - SplashOutFontFileID(Ref *rA) { r = *rA; substIdx = -1; } - - ~SplashOutFontFileID() {} - - GBool matches(SplashFontFileID *id) { - return ((SplashOutFontFileID *)id)->r.num == r.num && - ((SplashOutFontFileID *)id)->r.gen == r.gen; - } - - void setSubstIdx(int substIdxA) { substIdx = substIdxA; } - int getSubstIdx() { return substIdx; } - -private: - - Ref r; - int substIdx; -}; - -//------------------------------------------------------------------------ -// 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; - // sanity check for excessively large glyphs (which most likely - // indicate an incorrect BBox) - i = glyphW * glyphH; - if (i > 100000 || glyphW > INT_MAX / glyphH || glyphW <= 0 || glyphH <= 0) { - glyphW = glyphH = 100; - validBBox = gFalse; - } - if (aa) { - glyphSize = glyphW * glyphH; - } else { - glyphSize = ((glyphW + 7) >> 3) * glyphH; - } - cacheAssoc = type3FontCacheAssoc; - for (cacheSets = type3FontCacheMaxSets; - cacheSets > 1 && - cacheSets * cacheAssoc * glyphSize > type3FontCacheSize; - cacheSets >>= 1) ; - cacheData = (Guchar *)gmallocn(cacheSets * cacheAssoc, glyphSize); - cacheTags = (T3FontCacheTag *)gmallocn(cacheSets * cacheAssoc, - sizeof(T3FontCacheTag)); - for (i = 0; i < cacheSets * cacheAssoc; ++i) { - cacheTags[i].mru = i & (cacheAssoc - 1); - } -} - -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; - bitmapUpsideDown = gFalse; - allowAntialias = allowAntialiasA; - vectorAntialias = allowAntialias && - globalParams->getVectorAntialias() && - colorMode != splashModeMono1; - setupScreenParams(72.0, 72.0); - reverseVideo = reverseVideoA; - splashColorCopy(paperColor, paperColorA); - skipText = gFalse; - - 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; - - transpGroupStack = NULL; - - nestCount = 0; -} - -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 = 64; - } - 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 = 64; - } - 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(), -#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 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) { - 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) { -#if 0 // Acrobat ignores the flatness setting, and always renders curves - // with a fairly small flatness value - splash->setFlatness(state->getFlatness()); -#endif -} - -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 - - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - state->getFillGray(&gray); - splash->setFillPattern(getColor(gray)); - break; - case splashModeRGB8: - case splashModeBGR8: - state->getFillRGB(&rgb); - splash->setFillPattern(getColor(&rgb)); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - state->getFillCMYK(&cmyk); - splash->setFillPattern(getColor(&cmyk)); - break; -#endif - } -} - -void SplashOutputDev::updateStrokeColor(GfxState *state) { - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - state->getStrokeGray(&gray); - splash->setStrokePattern(getColor(gray)); - break; - case splashModeRGB8: - case splashModeBGR8: - state->getStrokeRGB(&rgb); - splash->setStrokePattern(getColor(&rgb)); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - state->getStrokeCMYK(&cmyk); - splash->setStrokePattern(getColor(&cmyk)); - break; -#endif - } -} - -SplashPattern *SplashOutputDev::getColor(GfxGray gray) { - SplashColor color; - - if (reverseVideo) { - gray = gfxColorComp1 - gray; - } - color[0] = colToByte(gray); - return new SplashSolidColor(color); -} - -SplashPattern *SplashOutputDev::getColor(GfxRGB *rgb) { - GfxColorComp r, g, b; - SplashColor color; - - if (reverseVideo) { - r = gfxColorComp1 - rgb->r; - g = gfxColorComp1 - rgb->g; - b = gfxColorComp1 - rgb->b; - } else { - r = rgb->r; - g = rgb->g; - b = rgb->b; - } - color[0] = colToByte(r); - color[1] = colToByte(g); - color[2] = colToByte(b); - return new SplashSolidColor(color); -} - -#if SPLASH_CMYK -SplashPattern *SplashOutputDev::getColor(GfxCMYK *cmyk) { - SplashColor color; - - color[0] = colToByte(cmyk->c); - color[1] = colToByte(cmyk->m); - color[2] = colToByte(cmyk->y); - color[3] = colToByte(cmyk->k); - return new SplashSolidColor(color); -} -#endif - - -void SplashOutputDev::setOverprintMask(GfxColorSpace *colorSpace, - GBool overprintFlag, - int overprintMode, - GfxColor *singleColor) { -#if SPLASH_CMYK - Guint mask; - GfxCMYK cmyk; - - if (overprintFlag && globalParams->getOverprintPreview()) { - mask = colorSpace->getOverprintMask(); - if (singleColor && overprintMode && - (colorSpace->getMode() == csDeviceCMYK || - (colorSpace->getMode() == csICCBased && - colorSpace->getNComps() == 4))) { - colorSpace->getCMYK(singleColor, &cmyk); - if (cmyk.c == 0) { - mask &= ~1; - } - if (cmyk.m == 0) { - mask &= ~2; - } - if (cmyk.y == 0) { - mask &= ~4; - } - if (cmyk.k == 0) { - mask &= ~8; - } - } - } else { - mask = 0xffffffff; - } - splash->setOverprintMask(mask); -#endif -} - -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::updateFont(GfxState *state) { - needFontUpdate = gTrue; -} - -void SplashOutputDev::doUpdateFont(GfxState *state) { - GfxFont *gfxFont; - GfxFontType fontType; - SplashOutFontFileID *id; - SplashFontFile *fontFile; - FoFiTrueType *ff; - Ref embRef; - Object refObj, strObj; - GString *tmpFileName, *fileName, *substName; - FILE *tmpFile; - int *codeToGID; - DisplayFontParam *dfp; - CharCodeToUnicode *ctu; - double *textMat; - double m11, m12, m21, m22, w1, w2, fontSize; - SplashCoord mat[4]; - char *name; - Unicode uBuf[8]; - int c, substIdx, n, code, cmap, i; - - needFontUpdate = gFalse; - font = NULL; - tmpFileName = NULL; - substIdx = -1; - dfp = NULL; - - if (!(gfxFont = state->getFont())) { - goto err1; - } - fontType = gfxFont->getType(); - if (fontType == fontType3) { - goto err1; - } - - // sanity-check the font size - skip anything larger than 10 inches - // (this avoids problems allocating memory for the font cache) - if (state->getTransformedFontSize() - > 5 * (state->getHDPI() + state->getVDPI())) { - 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)) { - if (!openTempFile(&tmpFileName, &tmpFile, "wb", NULL)) { - error(errIO, -1, "Couldn't create temporary font file"); - goto err2; - } - refObj.initRef(embRef.num, embRef.gen); - refObj.fetch(xref, &strObj); - refObj.free(); - if (!strObj.isStream()) { - error(errSyntaxError, -1, "Embedded font object is wrong type"); - strObj.free(); - fclose(tmpFile); - goto err2; - } - strObj.streamReset(); - while ((c = strObj.streamGetChar()) != EOF) { - fputc(c, tmpFile); - } - strObj.streamClose(); - strObj.free(); - fclose(tmpFile); - fileName = tmpFileName; - - // if there is an external font file, use it - } else if (!(fileName = gfxFont->getExtFontFile())) { - - // look for a display font mapping or a substitute font - if (gfxFont->isCIDFont()) { - if (((GfxCIDFont *)gfxFont)->getCollection()) { - dfp = globalParams-> - getDisplayCIDFont(gfxFont->getName(), - ((GfxCIDFont *)gfxFont)->getCollection()); - } - } else { - if (gfxFont->getName()) { - dfp = globalParams->getDisplayFont(gfxFont->getName()); - } - if (!dfp) { - // 8-bit font substitution - if (gfxFont->isFixedWidth()) { - substIdx = 8; - } else if (gfxFont->isSerif()) { - substIdx = 4; - } else { - substIdx = 0; - } - if (gfxFont->isBold()) { - substIdx += 2; - } - if (gfxFont->isItalic()) { - substIdx += 1; - } - substName = new GString(splashOutSubstFonts[substIdx].name); - dfp = globalParams->getDisplayFont(substName); - delete substName; - id->setSubstIdx(substIdx); - } - } - if (!dfp) { - error(errSyntaxError, -1, "Couldn't find a font for '{0: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; - } - } - - // load the font file - switch (fontType) { - case fontType1: - if (!(fontFile = fontEngine->loadType1Font( - id, - fileName->getCString(), - fileName == tmpFileName, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontType1C: - if (!(fontFile = fontEngine->loadType1CFont( - id, - fileName->getCString(), - fileName == tmpFileName, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontType1COT: - if (!(fontFile = fontEngine->loadOpenTypeT1CFont( - id, - fileName->getCString(), - fileName == tmpFileName, - ((Gfx8BitFont *)gfxFont)->getEncoding()))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontTrueType: - case fontTrueTypeOT: - if ((ff = FoFiTrueType::load(fileName->getCString()))) { - codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); - n = 256; - delete ff; - // if we're substituting for a non-TrueType font, we need to mark - // all notdef codes as "do not draw" (rather than drawing TrueType - // notdef glyphs) - if (gfxFont->getType() != fontTrueType && - gfxFont->getType() != fontTrueTypeOT) { - for (i = 0; i < 256; ++i) { - if (codeToGID[i] == 0) { - codeToGID[i] = -1; - } - } - } - } else { - codeToGID = NULL; - n = 0; - } - if (!(fontFile = fontEngine->loadTrueTypeFont( - id, - fileName->getCString(), - fileName == tmpFileName, - codeToGID, n))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType0: - case fontCIDType0C: - if (!(fontFile = fontEngine->loadCIDFont( - id, - fileName->getCString(), - fileName == tmpFileName))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType0COT: - if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { - n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); - codeToGID = (int *)gmallocn(n, sizeof(int)); - memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), - n * sizeof(int)); - } else { - codeToGID = NULL; - n = 0; - } - if (!(fontFile = fontEngine->loadOpenTypeCFFFont( - id, - fileName->getCString(), - fileName == tmpFileName, - codeToGID, n))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - goto err2; - } - break; - case fontCIDType2: - case fontCIDType2OT: - codeToGID = NULL; - n = 0; - if (dfp) { - // create a CID-to-GID mapping, via Unicode - if ((ctu = ((GfxCIDFont *)gfxFont)->getToUnicode())) { - if ((ff = FoFiTrueType::load(fileName->getCString()))) { - // look for a Unicode cmap - for (cmap = 0; cmap < ff->getNumCmaps(); ++cmap) { - if ((ff->getCmapPlatform(cmap) == 3 && - ff->getCmapEncoding(cmap) == 1) || - ff->getCmapPlatform(cmap) == 0) { - break; - } - } - if (cmap < ff->getNumCmaps()) { - // map CID -> Unicode -> GID - n = ctu->getLength(); - codeToGID = (int *)gmallocn(n, sizeof(int)); - for (code = 0; code < n; ++code) { - if (ctu->mapToUnicode(code, uBuf, 8) > 0) { - codeToGID[code] = ff->mapCodeToGID(cmap, uBuf[0]); - } else { - codeToGID[code] = -1; - } - } - } - delete ff; - } - ctu->decRefCnt(); - } else { - error(errSyntaxError, -1, - "Couldn't find a mapping to Unicode for font '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() - : "(unnamed)"); - } - } else { - if (((GfxCIDFont *)gfxFont)->getCIDToGID()) { - n = ((GfxCIDFont *)gfxFont)->getCIDToGIDLen(); - codeToGID = (int *)gmallocn(n, sizeof(int)); - memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), - n * sizeof(int)); - } - } - if (!(fontFile = fontEngine->loadTrueTypeFont( - id, - fileName->getCString(), - fileName == tmpFileName, - codeToGID, n))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0: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; - - // for substituted fonts: adjust the font matrix -- compare the - // width of 'm' in the original font and the substituted font - substIdx = ((SplashOutFontFileID *)fontFile->getID())->getSubstIdx(); - if (substIdx >= 0) { - 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 = splashOutSubstFonts[substIdx].mWidth; - 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; - m11 *= w1; - m21 *= w1; - } - } - } - } - - // create the scaled font - mat[0] = m11; mat[1] = m12; - mat[2] = m21; mat[3] = m22; - font = fontEngine->getFont(fontFile, mat, splash->getMatrix()); - - if (tmpFileName) { - delete tmpFileName; - } - return; - - err2: - delete id; - err1: - if (tmpFileName) { - unlink(tmpFileName->getCString()); - delete tmpFileName; - } - return; -} - -void SplashOutputDev::stroke(GfxState *state) { - SplashPath *path; - - if (state->getStrokeColorSpace()->isNonMarking()) { - return; - } - setOverprintMask(state->getStrokeColorSpace(), state->getStrokeOverprint(), - state->getOverprintMode(), state->getStrokeColor()); - path = convertPath(state, state->getPath()); - splash->stroke(path); - delete path; -} - -void SplashOutputDev::fill(GfxState *state) { - SplashPath *path; - - if (state->getFillColorSpace()->isNonMarking()) { - return; - } - setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), state->getFillColor()); - path = convertPath(state, state->getPath()); - splash->fill(path, gFalse); - delete path; -} - -void SplashOutputDev::eoFill(GfxState *state) { - SplashPath *path; - - if (state->getFillColorSpace()->isNonMarking()) { - return; - } - setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), state->getFillColor()); - path = convertPath(state, state->getPath()); - splash->fill(path, gTrue); - delete path; -} - -void SplashOutputDev::tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, Dict *resDict, - double *mat, double *bbox, - int x0, int y0, int x1, int y1, - double xStep, double yStep) { - double tileXMin, tileYMin, tileXMax, tileYMax, tx, ty; - int tileX0, tileY0, tileW, tileH, tileSize; - SplashBitmap *origBitmap, *tileBitmap; - Splash *origSplash; - SplashColor color; - double mat1[6]; - double xa, ya, xb, yb, xc, yc; - int x, y, xx, yy, i; - - // transform the four corners of the bbox from pattern space to - // device space and compute the device space bbox - state->transform(bbox[0] * mat[0] + bbox[1] * mat[2] + mat[4], - bbox[0] * mat[1] + bbox[1] * mat[3] + mat[5], - &tx, &ty); - tileXMin = tileXMax = tx; - tileYMin = tileYMax = ty; - state->transform(bbox[2] * mat[0] + bbox[1] * mat[2] + mat[4], - bbox[2] * mat[1] + bbox[1] * mat[3] + mat[5], - &tx, &ty); - if (tx < tileXMin) { - tileXMin = tx; - } else if (tx > tileXMax) { - tileXMax = tx; - } - if (ty < tileYMin) { - tileYMin = ty; - } else if (ty > tileYMax) { - tileYMax = ty; - } - state->transform(bbox[2] * mat[0] + bbox[3] * mat[2] + mat[4], - bbox[2] * mat[1] + bbox[3] * mat[3] + mat[5], - &tx, &ty); - if (tx < tileXMin) { - tileXMin = tx; - } else if (tx > tileXMax) { - tileXMax = tx; - } - if (ty < tileYMin) { - tileYMin = ty; - } else if (ty > tileYMax) { - tileYMax = ty; - } - state->transform(bbox[0] * mat[0] + bbox[3] * mat[2] + mat[4], - bbox[0] * mat[1] + bbox[3] * mat[3] + mat[5], - &tx, &ty); - if (tx < tileXMin) { - tileXMin = tx; - } else if (tx > tileXMax) { - tileXMax = tx; - } - if (ty < tileYMin) { - tileYMin = ty; - } else if (ty > tileYMax) { - tileYMax = ty; - } - if (tileXMin == tileXMax || tileYMin == tileYMax) { - return; - } - - tileX0 = (int)floor(tileXMin); - tileY0 = (int)floor(tileYMin); - tileW = (int)ceil(tileXMax) - tileX0; - tileH = (int)ceil(tileYMax) - tileY0; - - // check for an excessively large tile size - tileSize = tileW * tileH; - if (tileSize > 1000000 || tileSize < 0) { - mat1[0] = mat[0]; - mat1[1] = mat[1]; - mat1[2] = mat[2]; - mat1[3] = mat[3]; - for (y = y0; y < y1; ++y) { - for (x = x0; x < x1; ++x) { - xa = x * xStep; - ya = y * yStep; - mat1[4] = xa * mat[0] + ya * mat[2] + mat[4]; - mat1[5] = xa * mat[1] + ya * mat[3] + mat[5]; - gfx->drawForm(str, resDict, mat1, bbox); - } - } - return; - } - - // create a temporary bitmap - origBitmap = bitmap; - origSplash = splash; - bitmap = tileBitmap = new SplashBitmap(tileW, tileH, bitmapRowPad, - colorMode, gTrue, bitmapTopDown); - splash = new Splash(bitmap, vectorAntialias, origSplash->getScreen()); - for (i = 0; i < splashMaxColorComps; ++i) { - color[i] = 0; - } - splash->clear(color); - ++nestCount; - - // copy the fill color (for uncolored tiling patterns) - // (and stroke color, to handle buggy PDF files) - splash->setFillPattern(origSplash->getFillPattern()->copy()); - splash->setStrokePattern(origSplash->getStrokePattern()->copy()); - - // render the tile - state->shiftCTM(-tileX0, -tileY0); - updateCTM(state, 0, 0, 0, 0, 0, 0); - gfx->drawForm(str, resDict, mat, bbox); - state->shiftCTM(tileX0, tileY0); - updateCTM(state, 0, 0, 0, 0, 0, 0); - - // restore the original bitmap - --nestCount; - delete splash; - bitmap = origBitmap; - splash = origSplash; - splash->setOverprintMask(0xffffffff); - - // draw the tiles - for (y = y0; y < y1; ++y) { - for (x = x0; x < x1; ++x) { - xa = x * xStep; - ya = y * yStep; - xb = xa * mat[0] + ya * mat[2]; - yb = xa * mat[1] + ya * mat[3]; - state->transformDelta(xb, yb, &xc, &yc); - xx = (int)(xc + tileX0 + 0.5); - yy = (int)(yc + tileY0 + 0.5); - splash->composite(tileBitmap, 0, 0, xx, yy, tileW, tileH, - gFalse, gFalse); - } - } - - delete tileBitmap; -} - -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; - GBool doFill, doStroke, doClip, strokeAdjust; - - if (skipText) { - return; - } - - // 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; - - doFill = !(render & 1) && !state->getFillColorSpace()->isNonMarking(); - doStroke = ((render & 3) == 1 || (render & 3) == 2) && - !state->getStrokeColorSpace()->isNonMarking(); - doClip = render & 4; - - path = NULL; - if (doStroke || doClip) { - if ((path = font->getGlyphPath(code))) { - path->offset((SplashCoord)x, (SplashCoord)y); - } - } - - // don't use stroke adjustment when stroking text -- the results - // tend to be ugly (because characters with horizontal upper or - // lower edges get misaligned relative to the other characters) - strokeAdjust = gFalse; // make gcc happy - if (doStroke) { - strokeAdjust = splash->getStrokeAdjust(); - splash->setStrokeAdjust(gFalse); - } - - // fill and stroke - if (doFill && doStroke) { - if (path) { - setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), state->getFillColor()); - splash->fill(path, gFalse); - setOverprintMask(state->getStrokeColorSpace(), - state->getStrokeOverprint(), - state->getOverprintMode(), - state->getStrokeColor()); - splash->stroke(path); - } - - // fill - } else if (doFill) { - setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), state->getFillColor()); - splash->fillChar((SplashCoord)x, (SplashCoord)y, code, font); - - // stroke - } else if (doStroke) { - if (path) { - setOverprintMask(state->getStrokeColorSpace(), - state->getStrokeOverprint(), - state->getOverprintMode(), - state->getStrokeColor()); - splash->stroke(path); - } - } - - // clip - if (doClip) { - if (path) { - if (textClipPath) { - textClipPath->append(path); - } else { - textClipPath = path; - path = NULL; - } - } - } - - if (doStroke) { - splash->setStrokeAdjust(strokeAdjust); - } - - if (path) { - delete 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 (skipText) { - return gTrue; - } - - 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) - 2, - (int)floor(yMin - yt) - 2, - (int)ceil(xMax) - (int)floor(xMin) + 4, - (int)ceil(yMax) - (int)floor(yMin) + 4, - 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[i+j].mru & 0x8000) && - t3Font->cacheTags[i+j].code == code) { - drawType3Glyph(state, 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) { - --nestCount; - 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(state, 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; - - 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(errSyntaxWarning, -1, "Bad bounding box in Type 3 glyph"); - } - 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] = 0xff; - } 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); - ++nestCount; -} - -void SplashOutputDev::drawType3Glyph(GfxState *state, T3FontCache *t3Font, - T3FontCacheTag *tag, Guchar *data) { - SplashGlyphBitmap glyph; - - setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), state->getFillColor()); - 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::endTextObject(GfxState *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::drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageMaskData imgMaskData; - - if (state->getFillColorSpace()->isNonMarking()) { - return; - } - setOverprintMask(state->getFillColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), state->getFillColor()); - - 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]; - - 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; - - 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(); -} - -void SplashOutputDev::setSoftMaskFromImageMask(GfxState *state, - Object *ref, Stream *str, - int width, int height, - GBool invert, - GBool inlineImg) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageMaskData imgMaskData; - SplashBitmap *maskBitmap; - Splash *maskSplash; - SplashColor maskColor; - - 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]; - 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; - maskBitmap = new SplashBitmap(bitmap->getWidth(), bitmap->getHeight(), - 1, splashModeMono8, gFalse); - maskSplash = new Splash(maskBitmap, gTrue); - maskColor[0] = 0; - maskSplash->clear(maskColor); - maskColor[0] = 0xff; - maskSplash->setFillPattern(new SplashSolidColor(maskColor)); - maskSplash->fillImageMask(&imageMaskSrc, &imgMaskData, - width, height, mat, gFalse); - delete imgMaskData.imgStr; - str->close(); - delete maskSplash; - splash->setSoftMask(maskBitmap); -} - -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; - GfxRGB rgb; - 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; -#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: - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine; - x < imgData->width; - ++x, p += nComps) { - imgData->colorMap->getRGB(p, &rgb); - *q++ = colToByte(rgb.r); - *q++ = colToByte(rgb.g); - *q++ = colToByte(rgb.b); - } - 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]; - break; - case splashModeRGB8: - case splashModeBGR8: - col = &imgData->lookup[3 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = col[3]; - break; -#endif - } - *aq++ = alpha; - } else { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData->colorMap->getGray(p, &gray); - *q++ = colToByte(gray); - break; - case splashModeRGB8: - case splashModeBGR8: - imgData->colorMap->getRGB(p, &rgb); - *q++ = colToByte(rgb.r); - *q++ = colToByte(rgb.g); - *q++ = colToByte(rgb.b); - 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); - break; -#endif - } - *aq++ = alpha; - } - } - - ++imgData->y; - return gTrue; -} - -void SplashOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageData imgData; - SplashColorMode srcMode; - SplashImageSource src; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar pix; - int n, i; - - setOverprintMask(colorMap->getColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), NULL); - - 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]; - - 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; -#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; - } - src = maskColors ? &alphaImageSrc : &imageSrc; - splash->drawImage(src, &imgData, srcMode, maskColors ? gTrue : gFalse, - width, height, mat); - 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; - SplashColorPtr q, col; - GfxRGB rgb; - GfxGray gray; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar alpha; - Guchar *maskPtr; - int maskBit; - int nComps, x; - - if (imgData->y == imgData->height) { - return gFalse; - } - - nComps = imgData->colorMap->getNumPixelComps(); - - maskPtr = imgData->mask->getDataPtr() + - imgData->y * imgData->mask->getRowSize(); - maskBit = 0x80; - for (x = 0, p = imgData->imgStr->getLine(), q = colorLine, aq = alphaLine; - x < imgData->width; - ++x, p += nComps) { - alpha = (*maskPtr & maskBit) ? 0xff : 0x00; - if (!(maskBit >>= 1)) { - ++maskPtr; - maskBit = 0x80; - } - if (imgData->lookup) { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - *q++ = imgData->lookup[*p]; - break; - case splashModeRGB8: - case splashModeBGR8: - col = &imgData->lookup[3 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - break; -#if SPLASH_CMYK - case splashModeCMYK8: - col = &imgData->lookup[4 * *p]; - *q++ = col[0]; - *q++ = col[1]; - *q++ = col[2]; - *q++ = col[3]; - break; -#endif - } - *aq++ = alpha; - } else { - switch (imgData->colorMode) { - case splashModeMono1: - case splashModeMono8: - imgData->colorMap->getGray(p, &gray); - *q++ = colToByte(gray); - break; - case splashModeRGB8: - case splashModeBGR8: - imgData->colorMap->getRGB(p, &rgb); - *q++ = colToByte(rgb.r); - *q++ = colToByte(rgb.g); - *q++ = colToByte(rgb.b); - 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); - break; -#endif - } - *aq++ = alpha; - } - } - - ++imgData->y; - return gTrue; -} - -void SplashOutputDev::drawMaskedImage(GfxState *state, Object *ref, - Stream *str, int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, - int maskHeight, GBool maskInvert) { - 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; - - setOverprintMask(colorMap->getColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), NULL); - - // 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, - maskStr, maskWidth, maskHeight, maskColorMap); - delete maskColorMap; - - } else { - - //----- 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(); - 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; -#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; - } - splash->drawImage(&maskedImageSrc, &imgData, srcMode, gTrue, - width, height, mat); - - 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, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap) { - double *ctm; - SplashCoord mat[6]; - SplashOutImageData imgData; - SplashOutImageData imgMaskData; - SplashColorMode srcMode; - SplashBitmap *maskBitmap; - Splash *maskSplash; - SplashColor maskColor; - GfxGray gray; - GfxRGB rgb; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - Guchar pix; - int n, i; - - setOverprintMask(colorMap->getColorSpace(), state->getFillOverprint(), - state->getOverprintMode(), NULL); - - 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]; - - //----- 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; -#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; - } - splash->drawImage(&imageSrc, &imgData, srcMode, gFalse, width, height, mat); - - 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, i; - - // 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) { - for (i = 0; i < splashMaxColorComps; ++i) { - color[i] = 0; - } - 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); - ++nestCount; -} - -void SplashOutputDev::endTransparencyGroup(GfxState *state) { - // restore state - --nestCount; - 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) - if (tx < bitmap->getWidth() && ty < bitmap->getHeight()) { - splash->setOverprintMask(0xffffffff); - 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 - tSplash = new Splash(tBitmap, vectorAntialias, - transpGroupStack->origSplash->getScreen()); - if (transpGroupStack->blendingColorSpace) { - 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 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); - memset(softMask->getDataPtr(), 0, - softMask->getRowSize() * softMask->getHeight()); - if (tx < softMask->getWidth() && ty < softMask->getHeight()) { - p = softMask->getDataPtr() + ty * softMask->getRowSize() + tx; - for (y = 0; y < tBitmap->getHeight(); ++y) { - for (x = 0; x < tBitmap->getWidth(); ++x) { - if (alpha) { - lum = tBitmap->getAlpha(x, y) / 255.0; - } else { - tBitmap->getPixel(x, y, color); - // convert to luminosity - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - lum = color[0] / 255.0; - break; - 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(); -} - -void SplashOutputDev::setFillColor(int r, int g, int b) { - GfxRGB rgb; - GfxGray gray; -#if SPLASH_CMYK - GfxCMYK cmyk; -#endif - - rgb.r = byteToCol(r); - rgb.g = byteToCol(g); - rgb.b = byteToCol(b); - switch (colorMode) { - case splashModeMono1: - case splashModeMono8: - gray = (GfxColorComp)(0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.g + 0.5); - if (gray > gfxColorComp1) { - gray = gfxColorComp1; - } - splash->setFillPattern(getColor(gray)); - break; - case splashModeRGB8: - case splashModeBGR8: - splash->setFillPattern(getColor(&rgb)); - break; -#if SPLASH_CMYK - case splashModeCMYK8: - cmyk.c = gfxColorComp1 - rgb.r; - cmyk.m = gfxColorComp1 - rgb.g; - cmyk.y = gfxColorComp1 - rgb.b; - cmyk.k = 0; - splash->setFillPattern(getColor(&cmyk)); - break; -#endif - } -} - -SplashFont *SplashOutputDev::getFont(GString *name, SplashCoord *textMatA) { - DisplayFontParam *dfp; - Ref ref; - SplashOutFontFileID *id; - SplashFontFile *fontFile; - SplashFont *fontObj; - FoFiTrueType *ff; - int *codeToGID; - Unicode u; - SplashCoord textMat[4]; - int cmap, i; - - for (i = 0; i < 16; ++i) { - if (!name->cmp(splashOutSubstFonts[i].name)) { - break; - } - } - if (i == 16) { - return NULL; - } - ref.num = i; - ref.gen = -1; - id = new SplashOutFontFileID(&ref); - - // check the font file cache - if ((fontFile = fontEngine->getFontFile(id))) { - delete id; - - // load the font file - } else { - dfp = globalParams->getDisplayFont(name); - if (dfp && dfp->kind == displayFontT1) { - fontFile = fontEngine->loadType1Font(id, dfp->t1.fileName->getCString(), - gFalse, winAnsiEncoding); - } else if (dfp && dfp->kind == displayFontTT) { - if (!(ff = FoFiTrueType::load(dfp->tt.fileName->getCString()))) { - return NULL; - } - for (cmap = 0; cmap < ff->getNumCmaps(); ++cmap) { - if ((ff->getCmapPlatform(cmap) == 3 && - ff->getCmapEncoding(cmap) == 1) || - ff->getCmapPlatform(cmap) == 0) { - break; - } - } - if (cmap == ff->getNumCmaps()) { - delete ff; - return NULL; - } - codeToGID = (int *)gmallocn(256, sizeof(int)); - for (i = 0; i < 256; ++i) { - codeToGID[i] = 0; - if (winAnsiEncoding[i] && - (u = globalParams->mapNameToUnicode(winAnsiEncoding[i]))) { - codeToGID[i] = ff->mapCodeToGID(cmap, u); - } - } - delete ff; - fontFile = fontEngine->loadTrueTypeFont(id, - dfp->tt.fileName->getCString(), - gFalse, codeToGID, 256); - } else { - return NULL; - } - } - - // create the scaled font - textMat[0] = (SplashCoord)textMatA[0]; - textMat[1] = (SplashCoord)textMatA[1]; - textMat[2] = (SplashCoord)textMatA[2]; - textMat[3] = (SplashCoord)textMatA[3]; - fontObj = fontEngine->getFont(fontFile, textMat, splash->getMatrix()); - - return fontObj; -} - -#if 1 //~tmp: turn off anti-aliasing temporarily -void SplashOutputDev::setInShading(GBool sh) { - splash->setInShading(sh); -} -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.h b/thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.h deleted file mode 100644 index 80d3c66f..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/SplashOutputDev.h +++ /dev/null @@ -1,277 +0,0 @@ -//======================================================================== -// -// SplashOutputDev.h -// -// Copyright 2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef SPLASHOUTPUTDEV_H -#define SPLASHOUTPUTDEV_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include "gtypes.h" -#include "SplashTypes.h" -#include "config.h" -#include "OutputDev.h" -#include "GfxState.h" - -class Gfx8BitFont; -class SplashBitmap; -class Splash; -class SplashPath; -class SplashPattern; -class SplashFontEngine; -class SplashFont; -class T3FontCache; -struct T3FontCacheTag; -struct T3GlyphStack; -struct SplashTransparencyGroup; - -//------------------------------------------------------------------------ - -// 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 upside-down coordinates? - // (Upside-down means (0,0) is the top left corner of the page.) - virtual GBool upsideDown() { return bitmapTopDown ^ bitmapUpsideDown; } - - // 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(); - - //----- 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); - - //----- 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 tilingPatternFill(GfxState *state, Gfx *gfx, Object *str, - int paintType, 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); - 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 endTextObject(GfxState *state); - - //----- image drawing - virtual void drawImageMask(GfxState *state, Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void setSoftMaskFromImageMask(GfxState *state, - Object *ref, Stream *str, - int width, int height, GBool invert, - GBool inlineImg); - virtual void drawImage(GfxState *state, Object *ref, Stream *str, - int width, int height, GfxImageColorMap *colorMap, - int *maskColors, GBool inlineImg); - virtual void drawMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, int maskWidth, int maskHeight, - GBool maskInvert); - virtual void drawSoftMaskedImage(GfxState *state, Object *ref, Stream *str, - int width, int height, - GfxImageColorMap *colorMap, - Stream *maskStr, - int maskWidth, int maskHeight, - GfxImageColorMap *maskColorMap); - - //----- 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(); - - // Set this flag to true to generate an upside-down bitmap (useful - // for Windows BMP files). - void setBitmapUpsideDown(GBool f) { bitmapUpsideDown = f; } - - // 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(); - - // Set the Splash fill color. - void setFillColor(int r, int g, int b); - - // Get a font object for a Base-14 font, using the Latin-1 encoding. - SplashFont *getFont(GString *name, SplashCoord *textMatA); - - SplashFont *getCurrentFont() { return font; } - - // If is true, don't draw any text. - void setSkipText(GBool skipTextA) { skipText = skipTextA; } - - int getNestCount() { return nestCount; } - - -#if 1 //~tmp: turn off anti-aliasing temporarily - virtual void setInShading(GBool sh); -#endif - -private: - - void setupScreenParams(double hDPI, double vDPI); - SplashPattern *getColor(GfxGray gray); - SplashPattern *getColor(GfxRGB *rgb); -#if SPLASH_CMYK - SplashPattern *getColor(GfxCMYK *cmyk); -#endif - void setOverprintMask(GfxColorSpace *colorSpace, GBool overprintFlag, - int overprintMode, GfxColor *singleColor); - SplashPath *convertPath(GfxState *state, GfxPath *path); - void doUpdateFont(GfxState *state); - void drawType3Glyph(GfxState *state, 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); - - SplashColorMode colorMode; - int bitmapRowPad; - GBool bitmapTopDown; - GBool bitmapUpsideDown; - GBool allowAntialias; - GBool vectorAntialias; - GBool reverseVideo; // reverse video mode - SplashColor paperColor; // paper color - SplashScreenParams screenParams; - GBool skipText; - - 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; - - int nestCount; -}; - -#endif diff --git a/thirdparty/xpdf/3.02/src/xpdf/Stream-CCITT.h b/thirdparty/xpdf/3.02/src/xpdf/Stream-CCITT.h deleted file mode 100644 index c4458fe7..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Stream-CCITT.h +++ /dev/null @@ -1,459 +0,0 @@ -//======================================================================== -// -// Stream-CCITT.h -// -// Tables for CCITT Fax decoding. -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -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 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 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 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 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 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 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/thirdparty/xpdf/3.02/src/xpdf/Stream.cc b/thirdparty/xpdf/3.02/src/xpdf/Stream.cc deleted file mode 100644 index ea1cf962..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Stream.cc +++ /dev/null @@ -1,4771 +0,0 @@ -//======================================================================== -// -// Stream.cc -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma implementation -#endif - -#include -#include -#include -#include -#ifndef WIN32 -#include -#endif -#include -#include -#include "gmem.h" -#include "gfile.h" -#include "config.h" -#include "Error.h" -#include "Object.h" -#include "Lexer.h" -#include "GfxState.h" -#include "Stream.h" -#include "JBIG2Stream.h" -#include "JPXStream.h" -#include "Stream-CCITT.h" - -#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(errInternal, -1, "Called getRawChar() on non-predictor stream"); - return EOF; -} - -char *Stream::getLine(char *buf, int size) { - int i; - int c; - - if (lookChar() == EOF || size < 0) - 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; -} - -GString *Stream::getPSFilter(int psLevel, char *indent) { - return new GString(); -} - -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(errSyntaxError, getPos(), "Bad filter name"); - str = new EOFStream(str); - } - obj2.free(); - params2.free(); - } - } else if (!obj.isNull()) { - error(errSyntaxError, 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(errSyntaxError, getPos(), "Unknown filter '{0:s}'", name); - str = new EOFStream(str); - } - return str; -} - -//------------------------------------------------------------------------ -// BaseStream -//------------------------------------------------------------------------ - -BaseStream::BaseStream(Object *dictA) { - dict = *dictA; -} - -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(errInternal, -1, "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(); -} - -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) { - for (i = 0; i < nVals; ++i) { - imgLine[i] = 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() { - if (predIdx >= rowBytes) { - if (!getNextLine()) { - return EOF; - } - } - return predLine[predIdx++]; -} - -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 - 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 = str->getRawChar()) == 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; - } - 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; - } - } - - // 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) { - 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; -#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; -} - -//------------------------------------------------------------------------ -// MemStream -//------------------------------------------------------------------------ - -MemStream::MemStream(char *bufA, Guint startA, Guint lengthA, Object *dictA): - BaseStream(dictA) { - 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) { - str = strA; - limited = limitedA; - length = lengthA; -} - -EmbedStream::~EmbedStream() { -} - -Stream *EmbedStream::makeSubStream(Guint start, GBool limitedA, - Guint lengthA, Object *dictA) { - error(errInternal, -1, "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(errInternal, -1, "Called setPos() on EmbedStream"); -} - -Guint EmbedStream::getStart() { - error(errInternal, -1, "Called getStart() on EmbedStream"); - return 0; -} - -void EmbedStream::moveStart(int delta) { - error(errInternal, -1, "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(errSyntaxError, getPos(), - "Illegal character <{0: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(errSyntaxError, getPos(), - "Illegal character <{0:02x}> in ASCIIHex stream", c2); - } - buf = x & 0xff; - return buf; -} - -GString *ASCIIHexStream::getPSFilter(int psLevel, char *indent) { - GString *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]; -} - -GString *ASCII85Stream::getPSFilter(int psLevel, char *indent) { - GString *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]; -} - -int LZWStream::getRawChar() { - if (eof) { - return EOF; - } - if (seqIndex >= seqLength) { - if (!processNextCode()) { - return EOF; - } - } - return seqBuf[seqIndex++]; -} - -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(errSyntaxError, 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(errSyntaxError, 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; -} - -GString *LZWStream::getPSFilter(int psLevel, char *indent) { - GString *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; -} - -GString *RunLengthStream::getPSFilter(int psLevel, char *indent) { - GString *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(columns + 1, sizeof(int)); - refLine = (int *)gmallocn(columns + 2, sizeof(int)); - - eof = gFalse; - row = 0; - nextLine2D = encoding < 0; - inputBits = 0; - codingLine[0] = columns; - a0i = 0; - outputBits = 0; - - buf = EOF; -} - -CCITTFaxStream::~CCITTFaxStream() { - delete str; - gfree(refLine); - gfree(codingLine); -} - -void CCITTFaxStream::reset() { - int code1; - - str->reset(); - eof = gFalse; - row = 0; - nextLine2D = encoding < 0; - inputBits = 0; - codingLine[0] = columns; - a0i = 0; - outputBits = 0; - buf = EOF; - - // 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); - endOfLine = gTrue; - } - if (encoding > 0) { - nextLine2D = !lookBits(1); - eatBits(1); - } -} - -inline void CCITTFaxStream::addPixels(int a1, int blackPixels) { - if (a1 > codingLine[a0i]) { - if (a1 > columns) { - error(errSyntaxError, getPos(), - "CCITTFax row is wrong length ({0: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(errSyntaxError, getPos(), - "CCITTFax row is wrong length ({0:d})", a1); - err = gTrue; - a1 = columns; - } - if ((a0i & 1) ^ blackPixels) { - ++a0i; - } - codingLine[a0i] = a1; - } else if (a1 < codingLine[a0i]) { - if (a1 < 0) { - error(errSyntaxError, getPos(), "Invalid CCITTFax code"); - err = gTrue; - a1 = 0; - } - while (a0i > 0 && a1 <= codingLine[a0i - 1]) { - --a0i; - } - codingLine[a0i] = a1; - } -} - -int CCITTFaxStream::lookChar() { - int 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(errSyntaxError, getPos(), - "Bad 2D code {0: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; - } - } - - // check for end-of-line marker, skipping over any extra zero bits - gotEOL = gFalse; - if (!endOfBlock && row == rows - 1) { - eof = gTrue; - } else if (endOfLine) { - code1 = lookBits(12); - while (code1 != EOF && code1 != 0x001) { - eatBits(1); - code1 = lookBits(12); - } - if (code1 == 0x001) { - eatBits(12); - gotEOL = gTrue; - } else if (code1 == EOF) { - eof = gTrue; - } - } - - // byte-align the row - // (Adobe apparently doesn't do byte alignment after EOL markers - // -- I've seen CCITT image data streams in two different formats, - // both with the byteAlign flag set: - // 1. xx:x0:01:yy:yy - // 2. xx:00:1y:yy:yy - // where xx is the previous line, yy is the next line, and colons - // separate bytes.) - if (byteAlign && !gotEOL) { - inputBits &= ~7; - } - - // check for end of stream - if (lookBits(1) == EOF) { - eof = gTrue; - } - - // get 2D encoding tag - if (!eof && encoding > 0) { - nextLine2D = !lookBits(1); - eatBits(1); - } - - // check for end-of-block marker - if (endOfBlock && !endOfLine) { - code1 = lookBits(24); - if (code1 == 0x001001) { - eatBits(12); - gotEOL = gTrue; - } - } - 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(errSyntaxError, 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() { - int code; - CCITTCode *p; - int n; - - code = 0; // make gcc happy - if (endOfBlock) { - if ((code = lookBits(7)) != EOF) { - p = &twoDimTab1[code]; - if (p->bits > 0) { - eatBits(p->bits); - return p->n; - } - } - } else { - for (n = 1; n <= 7; ++n) { - if ((code = lookBits(n)) == EOF) { - break; - } - if (n < 7) { - code <<= 7 - n; - } - p = &twoDimTab1[code]; - if (p->bits == n) { - eatBits(n); - return p->n; - } - } - } - error(errSyntaxError, getPos(), - "Bad two dim code ({0:04x}) in CCITTFax stream", code); - return EOF; -} - -short CCITTFaxStream::getWhiteCode() { - short code; - 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(errSyntaxError, getPos(), - "Bad white code ({0: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; - 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(errSyntaxError, getPos(), - "Bad black code ({0: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)) & (0xffffffff >> (32 - n)); - } - inputBuf = (inputBuf << 8) + c; - inputBits += 8; - } - return (inputBuf >> (inputBits - n)) & (0xffffffff >> (32 - n)); -} - -GString *CCITTFaxStream::getPSFilter(int psLevel, char *indent) { - GString *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); -} - -//------------------------------------------------------------------------ -// 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 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, GBool 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::reset() { - int i, j; - - str->reset(); - - progressive = interleaved = gFalse; - width = height = 0; - numComps = 0; - numQuantTables = 0; - numDCHuffTables = 0; - numACHuffTables = 0; - gotJFIFMarker = gFalse; - gotAdobeMarker = gFalse; - restartInterval = 0; - - 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Unknown DCT marker <{0: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(errSyntaxError, getPos(), "Bad number of components in DCT stream"); - numComps = 0; - return gFalse; - } - if (prec != 8) { - error(errSyntaxError, getPos(), "Bad DCT precision {0: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 (numComps <= 0 || numComps > 4) { - error(errSyntaxError, getPos(), "Bad number of components in DCT stream"); - numComps = 0; - return gFalse; - } - if (prec != 8) { - error(errSyntaxError, getPos(), "Bad DCT precision {0: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(errSyntaxError, getPos(), "Bad number of components in DCT stream"); - scanInfo.numComps = 0; - return gFalse; - } - --length; - if (length != 2 * scanInfo.numComps + 3) { - error(errSyntaxError, getPos(), "Bad DCT scan info block"); - return gFalse; - } - interleaved = scanInfo.numComps == numComps; - for (j = 0; j < numComps; ++j) { - scanInfo.comp[j] = gFalse; - } - 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Bad DCT Adobe APP14 marker"); - return gFalse; -} - -GBool DCTStream::readTrailer() { - int c; - - c = readMarker(); - if (c != 0xd9) { // EOI - error(errSyntaxError, getPos(), "Bad DCT trailer"); - return gFalse; - } - return gTrue; -} - -int DCTStream::readMarker() { - int c; - - do { - do { - c = str->getChar(); - } while (c != 0xff && c != EOF); - do { - c = str->getChar(); - } while (c == 0xff); - } 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; -} - -GString *DCTStream::getPSFilter(int psLevel, char *indent) { - GString *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); -} - -//------------------------------------------------------------------------ -// 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::reset() { - int cmf, flg; - - index = 0; - remain = 0; - codeBuf = 0; - codeSize = 0; - compressedBlock = gFalse; - endOfBlock = gTrue; - eof = gTrue; - - str->reset(); - - // 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(errSyntaxError, getPos(), - "Unknown compression method in flate stream"); - return; - } - if ((((cmf << 8) + flg) % 31) != 0) { - error(errSyntaxError, getPos(), "Bad FCHECK in flate stream"); - return; - } - if (flg & 0x20) { - error(errSyntaxError, getPos(), "FDICT bit set in flate stream"); - return; - } - - eof = gFalse; -} - -int FlateStream::getChar() { - int c; - - if (pred) { - return pred->getChar(); - } - while (remain == 0) { - if (endOfBlock && eof) - return EOF; - readSome(); - } - c = buf[index]; - index = (index + 1) & flateMask; - --remain; - return c; -} - -int FlateStream::lookChar() { - int c; - - if (pred) { - return pred->lookChar(); - } - while (remain == 0) { - if (endOfBlock && eof) - return EOF; - readSome(); - } - c = buf[index]; - return c; -} - -int FlateStream::getRawChar() { - int c; - - while (remain == 0) { - if (endOfBlock && eof) - return EOF; - readSome(); - } - c = buf[index]; - index = (index + 1) & flateMask; - --remain; - return c; -} - -GString *FlateStream::getPSFilter(int psLevel, char *indent) { - GString *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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, 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(errSyntaxError, getPos(), "Bad dynamic code table in flate stream"); - gfree(codeLenCodeTab.codes); - return gFalse; -} - -// Convert an array of 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; -} - -//------------------------------------------------------------------------ -// EOFStream -//------------------------------------------------------------------------ - -EOFStream::EOFStream(Stream *strA): - FilterStream(strA) { -} - -EOFStream::~EOFStream() { - delete str; -} - -//------------------------------------------------------------------------ -// BufStream -//------------------------------------------------------------------------ - -BufStream::BufStream(Stream *strA, int bufSizeA): FilterStream(strA) { - bufSize = bufSizeA; - buf = (int *)gmallocn(bufSize, sizeof(int)); -} - -BufStream::~BufStream() { - gfree(buf); - delete str; -} - -void BufStream::reset() { - int i; - - str->reset(); - for (i = 0; i < bufSize; ++i) { - buf[i] = str->getChar(); - } -} - -int BufStream::getChar() { - int c, i; - - c = buf[0]; - for (i = 1; i < bufSize; ++i) { - buf[i-1] = buf[i]; - } - buf[bufSize - 1] = str->getChar(); - return c; -} - -int BufStream::lookChar() { - return buf[0]; -} - -int BufStream::lookChar(int idx) { - return buf[idx]; -} - -GBool BufStream::isBinary(GBool last) { - return str->isBinary(gTrue); -} - -//------------------------------------------------------------------------ -// 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 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; -} diff --git a/thirdparty/xpdf/3.02/src/xpdf/Stream.h b/thirdparty/xpdf/3.02/src/xpdf/Stream.h deleted file mode 100644 index e9ea1040..00000000 --- a/thirdparty/xpdf/3.02/src/xpdf/Stream.h +++ /dev/null @@ -1,884 +0,0 @@ -//======================================================================== -// -// Stream.h -// -// Copyright 1996-2003 Glyph & Cog, LLC -// -//======================================================================== - -#ifndef STREAM_H -#define STREAM_H - -#include - -#ifdef USE_GCC_PRAGMAS -#pragma interface -#endif - -#include -#include "gtypes.h" -#include "Object.h" - -class BaseStream; - -//------------------------------------------------------------------------ - -enum StreamKind { - strFile, - 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 -}; - -//------------------------------------------------------------------------ -// 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(); - - // 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(); - - // 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

B1t6&05T?Gf<9Sg3gT>7GZ4Gt;`C) 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

GSp%3 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%0A!Ecz3 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

wmw;zKIaE>3_hM&}#L~*tZaxt-cjo!dk0u! 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 u*KDo9HOZK)tG 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�b@yW9mq#1hmmIL}aN`Y;&~|hAPm$MC+!2PV#C#J0zDOeV zqfk*I&_@IpqnEFsr_UxTn)jq8F6@p3`tVLbkw4HE3|XN*P!(#E-}gl5RV&oXHtF*o zyT&CB(lo*rW9-1r?!}5KeVsyHC-UCaN~HUFJwhfV;0%GeaX0;H}@JllDLmG6xmuM^)H7s z3ED^2)?760B!QCqxbK|1o*J${(zF8G6)wU2f(x5&*@-z57bw7^c^W1t;v3toJRCHa z(}+{Y5bh(jnJX+jTY*w(xu6X839P^rQD5fN4=+!^YnO&^uWN$K3(E0o4dy#YcHsN2_o=p-S)t+{obj#HJwmeAN;XJJ>PAW8Ah| zBXPVMd6o!7+dgYIuf)OPs=E-bq=OWnQgR|n=#bSM#cR8FRt$+ydulwoAFD`zINJI- zB^IpacB^s&>&s(m;ZsU2n^L!SWoWk*YPSl|z@erx^^zs7fP1uv$_SW1pEK+$;vHK_ zB{_PTSXC_0hw=mMNFm=gg@F&0=s61!Rr_OXUd68bm~3nyDh`Sl#TM0`>QFS?WFfJy zOh`Iq%FU4NK~f7hQ=^i81811gS4qf$GtDUNeTnFkrR~6RcPN4UmOLR|wC|+?X|0ka zqF#00j<^- z;^XM?xG}6kM=Y7p4i@Ame}xj#gmHQ?x0qm? z-H>nBR8)tfZ9&|MyVKq%GffntAaH{l*CRr2GPjDMG19R7F0mWN>-@@)-v>{W z-+1JA4fA_3xd9R!SOw{kwcnCEzLaSoT$Uuo@YP|HZWPc=N99BO&MnZMUuO53bZ%IJagaNGOMVsz2QzYOQB$d{6mND})A3b59*a42vwnnSdfvX#?a?Wjwj-&`T+hxf8}S?i17 z2j*)Q1L7sIB{gYbcURq|u5nT!(cC93arJ@fp%+B27)-P~ z{2&rA<)NEwwX?*F@XEvkK9&#{vI?Pb30X~2C9SYwuMSa?w{V<7FJY#*7$q}EZCcpv zEbXzs@m#uDQF#erDOp^K8oeAqt;{G58p<2n=JElQBi~lnyh)YJWp@vOs8;1pyytR( z2trWRuw9~YpBkXecy(gNKXRZUeNM9F~`Z% z$&k7Am{HO_9~Z3f-Y+LHmsR(o8~3QJ2V^fCX{`}2@|}b7?G-ydK&p$zJ$w%*Sct`s zp?nT?&6$Mju?CVw0(%VbDdPD_xR?4YNwk(dUQHr&DnNK<%J;uO85QBm47cIA))@{6%D@?sM_-{9eZjp4Ge; z7jJ)UMvmp1D_%jIN1#-#2dutt8O|Y=jJ0PN;$A*3+QH2Ld*iric$KnZ$1@}y#nGU6 zej7w%H*Q-pUtEQ!0G85sueq)fYv(1mpV{TT)JPaT3q{@Sl@QhjURpb&tFb@ythug7 zyks@^v6lV8(uJ^ZlT$yKxM@KGRI@tNzvMUAQ-H9J>_0=bYQ-h!X+24)V~y(jx-!+~ zW4hXVp^+u)IG5&uMkiHpE8?lg*}uc-%c(3aRMV9G1qeYokTIPjw(u(RpgZ!4$yHQy zf9up!OEFsGQCkC%f&8}T{Yz;C-i$6o?mc}46-Pv%FI7(d&{Ex6`Mz3&;YH{6 z_RSgh1(5h!cW@e{ER3e@&Z?BPEFHhui9i1g#$VtL^+Ha^js#0OZrj&^Ofj+GuHp(# zUXr@hHD%#R^$a;VjqGiv=0b#j9 zpQ&|c6$k#Ro;lTw;)@nKPne|LC7SoOURphCsu(n*G!87nd#&)k)Y;CwGrN}7NVc0% zT2=-R`j57ytngm!^_bD$!wUr@>eeqo%8dGlEgx(H`5Xoi(e)287%cmW>6f;d#LD&E z@G@82KvvA+nWaxKX2!#MfF7vk(lvm0eL6C5P1`5@y-S+2;yC3Xcd>LMqRHM84{X3= zs%#j~Q6tE#=A?um^f8#lEJ^Ky7^@?6$2)SoL)qgSp}q* zZRj%Da?}Zvu|9p2_jgC~OO`R)jOGl@^co<^Rdj7%NUX+O%KqZA}$xqN*3YpJSTwkL% zktGchq#ngM%P?`~{mq>YH)Z(8VJZw`Id&u4hm@kDf?79elCtloK~b#|E}RRbL%XFQlO(WR}1S6&1#IXy|z@&L|pfy^0Fu ztXIQ6>q#kzkA(czy_Bq6?|vUps#?!!RqMIwEZB_pagMoCiJyMC zxJ?%-7m~Lj9#$u3BGl?i&jP#qj67ZxktM@+91aRtVa@{0>GZnN_yi(UI+#@`(NS_5 z#Y&H5T>{0{G^-G%mH{3NN7zIW*uz(Ln*02X{cZbT z=a!34yf1_1$g*@rzKN*Q58}s+@_PqhvR6zqT8qMa2Ha4ppvpp)QsZ&@ zhj1Vv@cYOW$t0&y)*6+&zhYO)C+7uJot5C7pFy*2C)-ruGz5AuDVNoek`X?SVo=}h z2+d`L!qgfR2NG87s6Y%%>6lX!_c}(_T4%se8TM6vmU<7@8oOXU6fq?ZLv5Me zgwV?s@$TdRtBrJWM~0fd5);k+V0_sy+g&JR8Jf*g<4AYS-#;@~Y+(lADeyO}bED!Q zK|lI+c(ZK8gEBi_@;51#`Vk_^(k!7ynqqZXYU*o>4@c48sgLr!EaXFD((|$8px~_) zyTJcv%kiOGs#t4Fa2_g|e~vguz&NvdA&TwD-gmDJ9l{|2Imx-v)yxYBWL3r8Wa;49 zD#LA|FVo(6>Z5wRg!`uj$Dyl>QahNhfH)1bExN7^{foXE7Bl z>BhD@{!KpW>%YVz0{&KaFXH0NVxqO-32+|GJw2|HSY2@jA&+H-R z#LCRSe+e>-)-l6*C6>*2TzW_oKX*^F7LGM90}+iA^qi#eTcYqke~ zZ#n~b@%B4Fku}=~;In2I14vuogLo*xeT2vWP5z+c?!nagSClWY-}Rc6_x!lc8R6xv0@3ISF!VqRkFik{552a zv6&_N-CS`wV+A~s7@J_I{*Oq;^ZC2upo6(0N;4kdx=qa8*hH?jWPe7!NB%YZGkoTX z3v{GaWG7=48OYkiU;o|3=8E6pihsvejx;%o$nhw9M6nf)r&xewzD3ddAJXKvqeiAv z?oW4$7oB1Z@08drC@ZT7OIDu4j@D|BJLa&vm$=MWr$SR6E7-9lb|fS}z0kYl5IfY} zZY?OWy-RZj5?h@aNNirxh2}UDIoPcF-Zh{@=rWXoMf!Bk%A$i_!6J@IEnSoEMXH4K zrvOOxW7p-rQ>%DM@+{??lJ6Y{4v_nDF8z(PXJ&_BbZjvaq9DkTD4Sr{@^|e`__d^u zCC&L%!xoeMfE#&Ai%^lxtemTLLS!>L7kbIB8K#UXh5HjRvK3>9O?5KAcIGFO;_ML5 zYA3_Amob?t$Chzq78z4$7A!0|@@j6WB@M`EBW9mx##u(pBtDuEvu;Lo?3%HW)>>Af z=hZP{Z3Dxk0iauCy?l0EUX6&=z}s)%ieJ-yky3XppDmlw6+sfxh#H${M<;$BQDEc? z=g$Zi%6yn?h_&f@_*A!+nD!ma#+Jp)>@8(LZIh%oPlT706}>~Qj^@iM%083%S*s*1 zWoZ~d%p2B0s-Q$j({RQf_Dp)kB<)OL9^wRZ7xYVs&$n#g#;^RyIMc2Ou%V*D9yoH zXPE0uL91~|TAGK3yV9U_v#n`*a3-A+>=89n8>=$g8BJ;s~X^T!gZ?2n$^L_;6 zPr`~t9O@cpu3KyX&c-#g6Z47?+MOTRWj^wzsQcLRW(~?O(`Rnq9Leb~Tt?4HK=kB!Mzu=kY6B zaxt#2k_+Ik)ZRvzEt}v2GleF1Y^4O0^N1ydf+6jqS#wL17eKboEj#%2$!>X=$zm{J4aK6p)%V^!=aYK3d8= zjg7(NWn?{>w{>qE`C#`hI0@$_W|W_o)AF*ZMD9O}ozOa`#j9tOn)W=T!1@s_fDnSh6M(N1c%ILou#-F(YRuIIGze=NK%%oxe%1=K{RV-&w)M?%&Dz2{2B zaI;c$vbO4wxl@$~eP`Hy&xn)G5zp=vnG*f785s}$4Os3pNXe^vW>zT{N-=&S zQ(xqefeYoX%>g8d94`otdx|f4Jy?Edci)5N=9Q6~uvd)puqeKBE;mh%7lyWsO#OYC z+Kbd)CpEIYrq%agWPh#928t)M`Mi_OgwRt9pBXozBEi3p9G`$}ARkpF%+1@)%~9(n zG|3Np_`L4Py_@3`LtCY6$1M|_qGBgzOj%!>+^DVeG{{)P-<>%n2&WWB1a>i1NF-fNe%qyuJfN23#yVd@`(Mh z1y$v5Ld(v|I%<6mL`u>KEW&kqkbPKs55k9?-^ z+sh(sp1IyYC$~n>2_rgq20B<}E$4&W{>|Jk*ZuPfa?9->C-nxlp1sVAF4?{O!_Og2 zvWC6rtUojTm$L$ep;~;7EX1zE($rZRo0|uC$L7Mw@xtI(c@l)N{u;*EkGR3jG1iTe zWzTs+KjwZ-?tuqvGml1M)LTvzQUz4w3B2nXR_YUAYFQ5H_bn{VAGGG>G;s#m{zv?J ztwRVs&tWG5G2cw>8EwCi_xo}`xYOFiMxKGo3}Qg-k*~QB)p1#K=U{g%%Fp~pjuo~w zCF+~#T`{x)RCW2chg(I@?$?gg*WucEQ|PRx==(I6*5y6B2geSImZtLhIaX_vRbNI~ z%Fj9jlXoV>0Ka2ZU&rGD*!D8c9f~CNO-X#Hp|wfOor4d#D&_;;O5P=2N-zf$0dr_|@`=|AZFxgc-utV@O-=g|OkK{zii_Mc4M_2^ zcYI!+Vq!a=^F;G==H^}CU%ZC1hvLCG&vdR{Lmsfp(L^5crv(TI0FJ@eTkCY&p;_US zV6a=fl!_|3AGe|rrZn~r_3>Z?8R5lJ%e?{lMB@4BtW+M65Z()N!+c<|zZYji_*BZ= zT6=*}?Y@7>WA>b$CoY;WsVViF--jj~r2S{FFua zK`%+S$y~-==TX`fV5|}CGEUX52$GG~t}n8b5$!UUT}tw0war{s3ZE1{HZzQ*U|BGQ zREtLKC)4(@#!g?E%ih8QV3c;Vcsoj`I7m&V2cxv5i-C4&s{;I6V8=2!C?uA#og6jZiHZUX*<8?#`E&Tv$`lsE=n= z5I*OT=GJ{+SaaEB7{XRdt>t~%-(xO+m`fCl;bsg9FwJdP^P>oGw9KC4pj(fp^tl>5 zo1epo_Ty_wjmU5=vv4XRbNL|mW=}LA`QcYr@*h~x@Lt@1iqU4;Gm&f<165;SEc-D0 zM`NHvEGCD6egz*e5Z**%KcM1{WU9u;nJEbL8656{Nx6;-iS60)Co zrk?JI{2EEDB{`f33UX03B@*g4QcvWjZ;j{TZGEZl^Rq*=rx}9%wi4*R{`zTVbPhB` zycET$>vyd6T%WEcs^*R?tQw#`M8Z1xQ4cnwpMsawG6k7k{*FE>XVr7%A+IZ7y=$&( z?&l=@6XZ(o2T)!VQ_Bic4dqL{Pp?-|KDJ7y$!gbF^4r<}#c1hSpnguIej2`tJtsMJ z0Bdkr-TAV*r~FVJvJO4Z58dH_8+i`<(4Ab;z5EXuZY3qSwz_vKS2da<=AFOBBw<^d{ZJ_&55VrpuVRM~UvZ2iz3CNDq}A&ZEmh|7-=Rc& zz>s&Lc18~3OHq@L?mT}dzVV3f876xvB>APpoKF`j*8Sjc7RMJ{)Y7oN>h41Q1x6Xw z?BY09>q@*yh8uOGFlTVGb4dzoP)D1(_!WU263{m| zNILnw+75Y61;w!qFVS>$)*wt8F2Hca`g%3X;kJYCI(#2e%voKky_U0z@P${I z@&eLTw|a^tt46I@KIGRIP3NbV%;n-$26@-S%t1zjCx z8@b!z@SD>)NeiQ`8?Q%PV0B8GHupyqrMsf%uqEa?N&aLfN98H6eQS{nt;$D16-Q(*tNl+*U#b#qXACPG;~D!LCn$6GDa!nzmK>YO zSpO}`uX5;Ll+}9KbX>wQPEP-875%Tp>pA^a1!rg31>Ulu7QEQgFMDAtywfxv*$Y-% z5p3W1(jzTxF*s$7;|Ka`DKzkV+KiT$B)E#lqpY{^Gp%!TM`Pih`Qa*_L ztPpNf!F{s3p<&69gG~<1voyC+hg()S=)h3oGQ+Wgg0O63Fp7(jtL?oC8T)(g_-^VO zcwZ)y!jZir_`Pa`J!#aZ3iGe55A$FhU=)jWfB_JitbsKU?#^R>$79v{kTnpcFmY@; zU#2*b#j)J;4t`G%t zsJ3!$b|waEL2>m0+#_j5GsH2xX8V$O7V|Im&(5&j1$fW2VMuBS@_TPHq2Iczl%asG zz_+YC{qjZ$F0WwffifjxycTOle}L>F;g#6E{xqK2rs8=#<)#_^EO2W!GLkX7+ zzo*1pzLQm*S)7U@?gTS>7$}}5hIUyqOU1E^X5({hUXOvV>UMS6UuGfe@LAY)a~&r5 z?OoDx08)#_Ww>)b=3DR+jZv$yJ->0;MUBxeW&2?JMX+=b=*B)X>?K?l=*BZ_AC%(( zA&e&i%bdVvc$R_7cr-G(qNlva-`H)g;O8@}z%qXT&yV9-Hw3M)8oTmhtXY?AkbGTE zycB73X^a8@syP2-r$NInMLB%5S;HoK(DTb2B0g!mhmwS8D;BP+Z_RycVF z6&t){?QbfECcBI~XRxf!oz?8fwC8|QKguEs_3N!A)S-7r;^RbMWwMJal37J^1+{`a zFyJwxzr;g^8NDas#A}PBCJ!>DWeUc;`eFxN@0JpX67U*ava z!rfvgcDN6j>kf@Q4n8gvq3+iATe1?7+g9RJMCjqhmDZi5R=9ol>s`L9!9gMnn;xtZ zMyP+L*IdzvXRwfLHol<9*88vZm@Bx=jZE<_!*@yWP`BJam#lRWGF?!*yKnca)ax7D z-yi5Q4tBZ6CBw37icz9}7Ie?~1w(C~_i1|6Qk$XxJKydT1EBWT(@g1 z-Wk2tD_-3Fh6t@hIjr-g*kJ`5Ohh(qKTck#vQ3@Ii@!Y=U5igGddIocO{!TXOOnYk zh#&>z2zfgC)q$3>>Xwr5`{ZKU&DXm{OIb!z4%=7C=*Ro;nZwkx&TBEyPeyzHoOcm| z7dTS`KDom!!Q>LYAoi|r~>D^!_9U-{NOXg<+eF6oQ+ zZ6tl=d-)LI1x31d6eZU<9hQ7`~0$!WJ)q2PxJG7SugZ2pWQ|5g%ZZ<_9MmUaay4+XE zO%ZSCzXZ-F_B@5tD3>k2-1LXDBTsW*T z^*F)#ra#o%dVSVwtSBe6Uks|zIPB1Klrv?h73t4*h9)_OXX4G&R?g>AKn?j5D&Xsdp86z_>`t&vTYQ?#-t zI`VzmuqVB5sqSHK3;w?C^65ROSKAk-#{s&{WrG0D=>_=zXR05vHkIUk)#-e1&5VZ8 zrnXN_=M4ZAFZkm0UofB09hp4LRdLz`)32qdc+k8y=>=fgedXGs+C6|1yLBGahk{di+-sn#<*Rs`HkTdOg42T>cj3YM#%4 z;OIBU00v%cYWrQ1M`d6>nSW^Aup14d(%*S?H*?;Dee~FaEF+%e1}*6=^OO9?z%R?d z?j%j*pj{)vKc&O@n$u|E)jIsP6NJB4hx0z*uqK?~QUF>7v#C8PAEUe?V&^#)w}KAywSvVXBWLvE-@&%)At_2JXU2H#9IHWlexbglkDc;jX=~4FEj0$AV5-aeLt-x8Z5hDT1>QNB zVlMv#1_xf;S`uVE>(d<-j*kHsLr=Tby-x&h1kqVygVwjdr(vt#qa zU>X)HC8jm2gt@F{!>>j62JggYl(AENeL8V^Q%l|j?zWqs%*q>?VUJ-%;l47Jd7~@~ zuO3S@c{N7P$b3^PsYi_TPu`B`uyeyAvf47DFntT2ZOqzSNq(4x@qK7CjoaXvcKj49 z-#v=|qwtp%&Ft^0y(nx^VKYhw=?kXy)2iz$!)Ni#C8xJB@6D}JiZb+dj4>9jWVY(I~ZJKB)P5MB~MEz9cih4}LDIK2@^<@f_Dp2VLly6td{#+n;gIX$sV^F0~ zL~66{wzF+i)@~{7PPjsd4ojQ<-q0U#7|F&aKgmAR@W{i{Ii2i`EO324beCq9L=_CL!q`U z9Z$T;TP6LGK}285=y>sccCS6Fmshd;_N>hyu({MmNaXid_Ppkf92K+{Jv(4TPRL~AxV8~hoRKZGRk?8!J$yKQ;wP+jr)*u@_!*A2mHnlq5$Xn%A>uS(8*a4+W^xbN~CTDi*xW1 zTY3g3OF@CzncK*EVurmnRvCYprLkU5PqFag`HhFOB!k|(-laCL@0#Hh!J`#QE}2ax zZ}H4jjznPwRPX>fz6ghBl3iCF+dpvU6-W1~7NIq4RaUI5M;y_j z#N<6`{=i2Yx25IZ3HA%pq!E&EtfFd{oQC)~tia(7tS?qXMbT(8YmgzWJ|&U+6(_V8 zvzpYhp>n~5#&Suy<)mEsv-zu;8x$4^gXcrltBB|GHs(Kl%)XZ^M1SI+#+Sd8@@jtF zOg|C?XK6O5H>gMCer0(sDY$=Q+3VR0gdxr9jm-t!T zW*?MZEOlq#!~r_!RnW_>h=hwv+ona170LRvU6`f1hKv0HU)cBbK-#4AF@DnaEXu{4 zqY=4YlI_Nqd!cNPrl{iNMBmfE1d-aD-CqrC_UQKX<-l_G*5sVbH|4`chA2=MqcFZX z!N|g4FELP}Z{i~%4ph|HjyzX^#N@e(9{bl$5%>bdj?g4$dFw!D-IO+Fn=xP;*;WKq zL5`&M%*ayB&LM}Cvy!({>)920wM)T`|4wW0s6|C;f9`(YUx6O8Bt7E)f6;^U>pSF+ z1(F`SPDl@!;&;~6>f7c56%IQ8I3_t zeToYLd}=|T3YpQx^pxj6S)SHtG4G%!uQz5V?-(uSt@JD!7BfN5{9&F?(o;4ntMs?9 zb{SF6*XTLC^!t(Dh?q;@saJbAO@n$anjcYmTJs~^wVr`vv7GSiz_Q_ixrt+sAsp(t z9o`qIDm0^>LaAhQqgg5!Sk2?bJeqCa=7BQKbxb5H#Y`(3_>AGKMANQuB!(A2e=3%*1^9zP`l++hS3m%v>% zr`M@&^H!^IBWmnJo>(DlK*ft_`45$fvr=3KvMtWaCi!VB`dI%5k>Tj|PgbYbg;;VZ zLffHUXTb*zT`etVrZ36iP}0y+XAEnx>?kuzYfnz%&{h3@I}@#KBZQ(%564LQxc@H@TB*PgduB)8iD*|hD=BFloCiS^-rrhw3Q*J!%l#0P+ zSDDezyiEp2gByo6c)JM1RpF<>p;jZ_9F;7D6>ov;vd0{DOApWy1kW9vh=1rri z(Bw+V8$Q{;@_i#EShUE|vPMZB+;ohkdw!$U9G9{ti}xUC_zq|;^Bo%mJ2*`{h3u#@ zLitvBkJF;$3Wsr@NUjDm<_P*>vYe9-c(czLGaMT^qByzuZB#@GF)fGsk)>0kbVE)- zz?8gnipK+@d^4bBsitQ1BuW$#+=|!z( zY5tOXrEaZpVG5?=g$|X9m|mPk!u!UU(fd(VyLsy{G1vT%oM}}qj@l3jZ$*L!kpQ1m zkOr4HVMGQBf(x+K9-KYwA^{}1Ly5F1fj6g7Yh3{grTFwATVPFO>#ge5f9Mw?ye9P` z_x13q`C>1wzPw>K_u_s{^J6wtg62o`E%xvl(fn}gHk?;!yHQs2!%mTE9#I-h4#@*g zSb;U1icqO^@j#nVwa0MVBU8Ia(!qhg>cw8uu4QjGKPLC|aEyW?WG{j)1;I*C7pfR8 z`}Vrc7(e(Ui+O~)7J7+O7q57yDG^wcT7h$lM`UI)!gi-*n5u35N~Y|uI6cgKa=O<^ zkmPj_vZWPx$ngVlhxIAjiz-|7=~+KnnU#)XL)H~rlYQCsl=o!GsZTh0JA+f*#~Zo6 z0KKX0X%<+00woKmlZ#PFaMkH|ubghLbdWuZEKW zS@s1QUZmk=8dd|cP9M?m;~M^*hW`X88BD`(Y4~Fee*?%rzDYM4RKBXtGF*G)Ysj*h zlw}Z-4r~wGPssK%F55|XE*#UGuVDos)6UTFvw);&hlV|X%##Phgj}eR#s)H%5Sg+p z1DQ&Q#FFL+ln|XQX%8lmuvqoKQL5oI-6ypg-sBqbhfyj2ysqOzbbskT)Vna-d0p{B zt=|YZnKkbB&`LhmmzM=XF(LOjV+< z+w&&4;&86~39j0Fuj@+q(^W|a|1t1~Yln-E@w%$vPgf%y!V3^yFy2*+zRGsz0?#<4 zN4$6e>TD?24oDZ54*8%CwRv9G<;a)r3h9sz^@_u}U`%dgUXxY1Q z<6V{>f}0NKGR8ro<+?L~XPnnH4e=`Au78Ck4k@NoKj zz+1|_50LJ|+FcBIF?!^jVQv!ejPpR|C^rpo8hUTSNnIg$H`{q2W0ZS8Al(Jpl>yRy zK)VY8FGSk2a-0XUO1VZ1BYvei^I7< zgIc)uG0-!OZ0CmT`0KipNyk5b*ci-j@6K_qcsFh=(!X<80DbD@?hJ&V*tyaBf8BqX zxiouT{YyO;Kz}^BGZB7bHwL=(yK%X?#c*BYFM(6X`Rh5#B9E&HBd7?j7_zAd_+mUy zqwGe_Jiu=PUJCpnK+Z$$aJ9huSaXD554;$7H*g>DyMR{#?*;A!{srJufIk7qe_e15 zzz-rk58?BH``}7Y{+Ymoc&gf-wJ#x@C|@oxMgs2fDa(tK=^gQ&xCsq%0C16?RdTv;ad?t7Wn6YzaRL+ zfO&BD!p#KUkMJ=F|0MAD0AC6GY~c3*zY6#s;1huV1Mm+4UjsM}?moELzz-ulAK@*) z&w+a%%0CPE9eBP1;m;v_Jn)6UF9iM=AhqL8xO(6R5MGGzPXm7+@UH-$1iTga)xh@w zH-Uc<_{G3C0&=~!9BwY~w-C<$p9lO5xN~*?e+kbO2;YKm_Wx&rpAY<-fCgL#+zjBa zAe{aG3E<}f|7YOr|GRX z*HXAyz~2DI{{IZ{$-ut`oc-Sh{2Ji@1)Tl=kH9Yh{tTcAw*u~3;Kvbuvhm-8@a*yb z4W!E+|G!3f_V~Xac=q_;2|RoJ{{ZQ;$NwROpKSc^KzR1}{~l6jkN+gXv&a9x0?!`* zKL?&Y{+~kn?D2mL;U^pa|B3MI@&9e4&mRB3MR@l3Uj;mS{J#J^d;G6O`t0%lzY%`2 z@&8kVXOI8?K>FX%&mRB31fD(qHz9rY`2QoqPd5I4jPUI7|1G4?9{;~V zc=q`J7vS0Be>d>#@&7}l&mRAOK={eV|4$H}J^ue4>9faw3gOw~|9=6`9{(=`|G(`0 z3w#vS9X^bo-A$AzYEV?H*e-~Q3YZN6f>I3-F2R7o1Vu&3k_3q4W)cJ}YE(q6P*G7) zQKRA=Eml-i)TpRbv8MG>3uxp0hKh>SDy{GHocYeqnUk4?_V@q4@B8_@9bKM%&iDC# z&t=Y>IWw7^V;=ucz~4One}X;T@&6+1=J9_Q{LSP4W7y5(|2lB<`2Q=odHg>LfAjeN z9`3XnXRBu79PZ2p zy92x8(-WU4K6~TC>&#!^vkN}^;lsad&^LllH+(pUJ^&y7w=X_>;Byc@F?{yHhu4?~ z;)52$SeJ=%aKrO*{LT1?48A*OM8@gQ=~V9@&;CiUo$n(wyr4H2;&-;=NqSGh_@lb) zkY8TV)hSs(JiIS~&qNlut2p=hqfrUOx9xd5u;=f(Lng57BM~>)Dy<1*4Kd-&I%dgzKSoQUSIsM0NUsvyMfBle!QGUF?>!u zy7JobY;N!09hK+*)W1`HR{6tURk?5xYI@AVCHS`~8?V>$o@&K&1@0fPz4z{PT&^8H ze*=1NbH%@uoY z&kD^Og85#@jJz>|=O|#koByB-A?a#KY7I~7dIZ#CGfz)d+~Rxjq4So=FBe4Bl~D=Y zIcd*hVXDf+`|)m(th)XZDHAfMDk<;*hk=jHyf~^FGvAG<1rdI2k%&8E{Bs1JAJa1j zU*D5##535~^~lU|Y9R7G4IdsQ`!{+Yv+{_})PZhn*`(}<&Ij~I@ zd*96CG%pF}XWbNo;SaIQ<=xbiF+3F15zG8zH}x}9mt%^a%60hJn&tc+LAt4r2aSHvso zE34wo$!RrJ@#?zx^qORIRlKRWu_{^X=w{bd)YmpNRy8$MRmP{))K|=k*HqQbXr9?w zuH!nAnN`Wks>T3`np9Ucx1p+{8PTfhD&zIjyLK9KL_B)b*HzUuH&IzQvdmW>@{}T8R7g!zMY0Y!z22#yu7{(mnm)a{ zq8hOzz7A>2Q~JtebMokTZFN&qb={13PEI^Iy%}YiK3&>;?Cj~&Ymt?1^N_MRF{;t( zjg4rgI9k3r+1MPfO*YP|YIOF=w3;M#gO1YoH#tY=#a5?wq!HPJO(xx^^ejcvj8LtFeAgyt*kqr?DP&maf54Ri1me+t+dnosd%2prYzF zJh5z~BMhla@u??E)#Cl*scuwJQ-yv9tgNnRu5Wbrdr{rl$(m{$D7DEMIGU@^(Z{xVBq&vc>d#2l z#48XgiNmomK8(93cka2za{ml39a&T~wkp+?^!_=_DbZo^WOH+4^|aaOSdhwS!Ok{% zzq$^kLxoZX_b}4CJe7LZ z>||YY^*PCAjud{AeZaaoqTwp4o2b|QRk`h!>f5@r3>y|d_SpDQqd7DdR_P-NLl(-k zn-UXBZyAm{adus?9wsdVJk(L6l8rUuYA$)-^d^C)UrAZ`yx^K9NjM)-*A~2##k(O$qU2 zd$_y6uBCKKCs_?2J6HLdNe#~*q*86kZ>q#SI+PTMSl`&BMpQR9l~gs3bWaz`*e%N1 zf9k~I)QBf}j~qD~e_BYj2EO^5L9xn?UDsB*wN$C@!f#G#${Le(P1EZeYn9Q>@Li1? zQ8Xr3a@60))YMNyv#D_Nyj&$@hAw~Ic@z&i?tet+&q ze2Yci1)nc>bnfo}k2(}U%gBJXuE)?@zp({cF6eSeel!XPJ; zPxENd?;k>qKfjp2PuLYdN*KnUeWc#2-|06GMsB*PKFvZH8v5aYl9FM_@O|K(4b`+fTDOvmUKXzk?vD*jF3Ke%5-`7!#HQ%$M+RZQFA{VJW$ zE2;wrERWX?9H2ZF|F`|G1^(9p|7(H&wZQ*c;D0Uf|K1iz3{G9fI#;K-f5`c_yCw4E z;yGot?1S9fK%T(opFg^KZdIjoqr;Q<@)$Z|_H_4#n&~@q)Cr@5(h~`N1?-yqv2eZY z8q8RUJok2iYqjfk55xSm#?3IDxB(|73js#@2} zOi$$Cq8+y*oxAT=yjv@eywS2Ytz`?5?fF?w~3ASTT*4g zSJok$H!83N)xDqCg7(AMG=7z7Y%O97+DFUN_~}Q)LdyBN_yzU(t!Zpsbs>W5-dAiv zF$>f9m8bEWpT=)l8r$kLG27GFwxo&Kg*Vnh+OvkK-^f6JP1q4jU&(#eh^BjC0OUTbM6wY^#(FU&*^*z~{axF>PgDU+D{bTZo}{~y`-`@0v}H$#tsiXsW7|kG?gNA$I1w z9QJnDu{%6}Ip)^D#y?Q{+G~O{&c6;@0c`eo%a~i4Cu~9G?TWtM3fm+zKcl?;VCNra zgY1l540}23{M&1)z9?@TbS7iN_Pp41e@CC3cuDM{Or){B7BN1yvHZu~hsLqKQtTxm z_6@K%;6xBqKE~eydwYnTdp~f_L*W2EBmFe zxA#-{6|NIsAJ0bH-wk_C|6n`Iz8>}^u=~y{G9G-u*sw)H%ASESid)zi+(+zTV=#Sj z|EO5sK-$&0f#lpl!Z8UO4qMf6l)^7~oxg*p_N~lCso_2^$q^0qQ;?TS(4EN7iL73D#^!a*L}e57xwS?%3*T8iF;2(3B6vcmZ=p z3;uEYzR^B2p=on9tYm2Nh|!I~eSDHtSqwFhf@ zqQAAenvP&i0sAB-jk?TRJ8RgtS9C}FKr;Z}Q}xDmNKeo<*p|S?=P*(>qup8&za91_ zm@^a#9nfy;peexv9a@tetoej-Tn%?>K%A~I#L1U9Il&s2D=%6^2d-fAAiuD04 zfPVvQ=i+-tw$DFxy-(dt=(a*Po4Rcf(d5U}G5VS?DEw9EOzGJaU^X+ocL(m-+(>idLxd}mwW7reLF@p zD}y!jkxw~Jd>qcbd=_RDT@u6H9^`@KR%o`S(XhPhplQKH#>p`wj&UvV0qh;cN_}9~ z$FOJMI-`98%7J30%3<7B=>vQDMC1W;%0AY)4vHhG5cUq(>&^Jq+-@c`C8Y{)*)U?r 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 RFB5tb5tX=G!uLw}e*?t9z3Kn} diff --git a/thirdparty/xpdf/3.02/lib/macx/libxpdf.a b/thirdparty/xpdf/3.02/lib/macx/libxpdf.a deleted file mode 100644 index 34ce1564ecbb6c0bfa77b90b9a463c08ca77300b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4298120 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